Docker 提交创建的图像和 ENTRYPOINT
Docker Commit Created Images and ENTRYPOINT
当您通过 docker commit
进行更改时,您如何确保 Dockerfile 中指定的原始 CMD 在 docker run
上仍设置为 运行?
以下是事件的顺序,以使其更加清晰:
- 使用 Dockerfile 创建镜像
- 运行 来自图像的容器
-ti --entrypoint /bin/bash
在之后的某个时候进行一些更改
- 在容器内进行更改,运行
docker commit
以使用新标签创建新图像
- 当新镜像为 运行 时,原始 Dockerfile 中的原始 CMD 条目不再是 运行
所以我在问;如何在已提交的映像上再次从 Dockerfile 重置 CMD?
您将创建一个 Docker 文件来设置 CMD
或 ENTRYPOINT
。只需将 Docker 文件基于 docker commit
返回的图像 ID。例如,鉴于此:
$ docker commit $(docker ps -lq)
69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b
我可以创建一个如下所示的 Docker 文件:
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 提交;如果您首先依赖 Docker 文件来实施必要的更改,您最终会得到一组更易于审核的更改。
当前 Docker 版本(我使用的是 1.11.1)提供了一个 --change
选项,允许在提交时对图像进行在线操作,如:
docker commit --change='ENTRYPOINT ["myEntryPoint.sh"]' $(docker ps -lq)
CMD
和其他几个一样也受支持。有关详细信息和示例,请参阅 manpage。
当您通过 docker commit
进行更改时,您如何确保 Dockerfile 中指定的原始 CMD 在 docker run
上仍设置为 运行?
以下是事件的顺序,以使其更加清晰:
- 使用 Dockerfile 创建镜像
- 运行 来自图像的容器
-ti --entrypoint /bin/bash
在之后的某个时候进行一些更改 - 在容器内进行更改,运行
docker commit
以使用新标签创建新图像 - 当新镜像为 运行 时,原始 Dockerfile 中的原始 CMD 条目不再是 运行
所以我在问;如何在已提交的映像上再次从 Dockerfile 重置 CMD?
您将创建一个 Docker 文件来设置 CMD
或 ENTRYPOINT
。只需将 Docker 文件基于 docker commit
返回的图像 ID。例如,鉴于此:
$ docker commit $(docker ps -lq)
69e9c08825508ec780efc86268a05ffdf4edae0999a2424dbe36cb04c2a15d6b
我可以创建一个如下所示的 Docker 文件:
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 提交;如果您首先依赖 Docker 文件来实施必要的更改,您最终会得到一组更易于审核的更改。
当前 Docker 版本(我使用的是 1.11.1)提供了一个 --change
选项,允许在提交时对图像进行在线操作,如:
docker commit --change='ENTRYPOINT ["myEntryPoint.sh"]' $(docker ps -lq)
CMD
和其他几个一样也受支持。有关详细信息和示例,请参阅 manpage。