Dockerfile 中 ENTRYPOINT 與 CMD 區別

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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章