Dockerfile-ENTRYPOINT(它指定容器啟動時要運行什么可執行文件)


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"]

 


  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM