情況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 + 輸入的命令