在Dockerfiles中有两个看起来与我类似的命令:CMD和ENTRYPOINT.但是我猜它们之间存在着一种(微妙的?)差异 - 否则对于同样的事情来说两个命令就没有任何意义.
文档说明了 CMD
CMD的主要目的是为执行容器提供默认值.
并为ENTRYPOINT:
ENTRYPOINT可帮助您配置可作为可执行文件运行的容器.
那么,这两个命令之间的区别是什么?
我已阅读有关 CMD 和 ENTRYPOINT 的文档
https://docs.docker.com/engine/reference/builder/#entrypoint
在这里,他们在表中提到“不允许使用 CMD 和 NO ENTYRPOINT”,但是我创建了一个没有 CMD 和 ENTRYPOINT 的 Dockerfile,并且镜像构建成功。下载高山焦油从这里高山焦油
文件
from scratch
ADD alpine-minirootfs-3.11.2-x86_64.tar.gz /
COPY . /
Run Code Online (Sandbox Code Playgroud)
构建图像:
docker build -t test:1 .
Sending build context to Docker daemon 2.724MB
Step 1/3 : from scratch
-----
Successfully tagged test:1
docker run -ti test:1 /bin/sh
/ #
Run Code Online (Sandbox Code Playgroud)
有效!!那么为什么在文档中提到 CMD 或 ENTRYPOINT 是必要的?
我有一个原始docker映像,我想运行一个容器并对其进行修改,然后提交一个新映像。我检查了原始的docker映像,并且有一个conf
"Config": {
...
"Cmd": [
"/bin/bash",
"-ic",
"./run.sh"
],
...,
"Entrypoint": null,
...
},
Run Code Online (Sandbox Code Playgroud)
我想为新提交的映像保留相同的Cmd和Entrypoint。但是无论是否使用--change,我都无法保留“ Entrypoint”:新图像的null。有什么办法吗?而且,我也使用docker-py,它有同样的问题。