The exec form, which is the preferred form:
ENTRYPOINT ["executable", "param1", "param2"]
The shell form:
ENTRYPOINT command param1 param2
請注意
exec表單被解析為JSON數組,這意味着必須在單詞周圍使用雙引號(")而不是單引號(')。
與shell表單不同,exec表單不調用命令shell。這意味着正常的shell處理不會發生。例如,ENTRYPOINT ["echo", "$HOME"]不會對$HOME進行變量替換。如果需要shell處理,那么要么使用shell形式,要么直接執行shell,例如:ENTRYPOINT ["sh", "-c", "echo $HOME"]。當使用exec表單並直接執行shell時(就像使用shell表單一樣),是shell執行環境變量展開,而不是docker。
示例:
vim Dockerfile
FROM ubuntu
ENTRYPOINT ["top","-o","%MEM"]
通過上面的運行結果可以看出,docker run命令指定的容器運行命令不能覆蓋Dockerfile文件中ENTRYPOINT指令指定的命令,反而被當做參數傳遞給ENTRYPOINT指令指定的命令之后
docker運行的命令行參數將被附加在執行表單ENTRYPOINT的所有元素之后,並將覆蓋使用CMD指定的所有元素。
vim Dockerfile
FROM ubuntu
ENTRYPOINT ["top","-p","1"]
CMD ["-o","%MEM"]
docker build -t ubuntu:t7 .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM ubuntu
---> 1318b700e415
Step 2/3 : ENTRYPOINT ["top","-p","1"]
---> Using cache
---> 2648b9534628
Step 3/3 : CMD ["-o","%MEM"]
---> Running in d0496db85c77
Removing intermediate container d0496db85c77
---> c3c934e21488
Successfully built c3c934e21488
Successfully tagged ubuntu:t7
docker run -it ubuntu:t7 | grep "load average"
top - 10:15:32 up 8:01, 0 users, load average: 0.39, 0.62, 0.77
如果使用CMD為ENTRYPOINT指令提供默認參數,則應使用JSON數組格式指定CMD和ENTRYPOINT指令
vim Dockerfile
FROM ubuntu
ENTRYPOINT ["top","-p","1"]
CMD ["-o","%MEM"]