情况1:
Dockerfile 文件内容
FROM alpine:3.7
CMD ["echo", "hello", "world"]
CMD
存在,ENTRYPOINT
不存在
构建镜像docker build -t test .
启动容器docker run test
输出hello world
, 相当于执行了echo hello world
执行命令docker run test echo test
输出test
, 相当于执行了echo test
当 run
时没带其他命令, 执行 CMD
里的命令
当 run
时带有其他命令, 会覆盖 CMD
里的命令
注: CMD
还有一种写法 CMD echo hello world
, 是以 /bin/sh -c
的方法执行的命令, 等于执行 /bin/sh -c "echo hello world"
情况2:
Dockerfile 文件内容
FROM alpine:3.7
ENTRYPOINT ["ls"]
CMD
不存在,ENTRYPOINT
存在
构建镜像docker build -t test .
启动容器docker run test
输出test
, 相当于执行了ls
执行命令docker run test -a
输出. .. test
, 相当于执行了ls -a
当 run
时没带其他命令, 执行 ENTRYPOINT
里的命令
当 run
时带有其他命令, 执行 ENTRYPOINT + 输入的命令
注: run
时可以带上 --entrypoint
来覆盖 ENTRYPOINT
, 例如 docker run --entrypoint="/bin/sh" test
情况3:
Dockerfile 文件内容
FROM alpine:3.7
ENTRYPOINT ["ls"]
CMD ["-a"]
CMD
存在,ENTRYPOINT
存在
构建镜像docker build -t test .
启动容器docker run test
输出. .. test
, 相当于执行了ls -a
执行命令docker run test -c
输出test
, 相当于执行了ls -c
当 run
时没带其他命令, 执行 ENTRYPOINT + CMD
里的命令
当 run
时带有其他命令, 会覆盖 CMD
里的命令, 执行 ENTRYPOINT + 输入的命令