Docker提交创建的图像和ENTRYPOINT
docker run
通过进行更改时,如何确保在Dockerfile中指定的原始CMD仍设置为在其上运行docker commit
?
这是事件的顺序,以使其更加清楚:
- 使用Dockerfile创建映像
-ti --entrypoint /bin/bash
之后从image运行容器以进行一些更改- 在容器内进行更改并运行
docker commit
以创建带有新标签的新图像 - 运行新映像时,不再运行原始Dockerfile中的原始CMD条目
所以我问 如何在已提交的映像上再次从Dockerfile重置CMD?
-
您将创建一个Dockerfile来设置
CMD
orENTRYPOINT
。只需将Dockerfile基于由返回的映像IDdocker commit
。例如,鉴于此:$ docker commit $(docker ps -lq) 69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b
我可以创建一个如下所示的Dockerfile:
FROM 69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b CMD ["/bin/bash"]
然后使用它来构建新图像:
$ docker build . Step 0 : FROM 69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b ---> 69e9c0882550 Step 1 : CMD /bin/bash ---> Running in f886c783551d ---> 13a0f8ea5cc5 Removing intermediate container f886c783551d Successfully built 13a0f8ea5cc5
也就是说,最好的做法可能是 不对 容器进行更改,然后使用Docker
commit。如果仅仅依靠Dockerfile首先实现必要的更改,那么最终将产生更多可审核的更改。