[英]What is the difference between CMD and ENTRYPOINT in a Dockerfile?
[英]difference between cmd and entrypoint in dockefile
我是Docker的新手,對ockfile有一個簡單的問題。 我們可以在停靠文件中寫入入口點和CMD。 似乎在創建容器期間執行了入口點。 並且在啟動容器期間執行CMD。 這是真的?
不完全是:
ENTRYPOINT
配置一個將作為可執行文件運行的容器。
因此它總是被執行(或默認的/bin/sh -c
是)。
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)
ENTRYPOINT
docker run <image>
命令行參數將附加在exec形式ENTRYPOINT
所有元素之后,並將覆蓋使用CMD指定的所有元素。shell形式可防止使用任何
CMD
或運行命令行參數,但具有以下缺點:ENTRYPOINT
將作為/bin/sh -c
的子命令啟動,該子命令不傳遞信號。
這意味着可執行文件將不是容器的PID 1,並且不會接收Unix信號,因此您的可執行文件將不會從docker stop <container>
接收到SIGTERM。
您可以將CMD
視為ENTRYPOINT
參數。
如果沒有入口點(默認命令為“ /bin/sh -c
”),則CMD
可以包含可執行文件。
如果ENTRYPOINT
已經運行了可執行文件,則CMD參數是該命令的參數(如果使用docker run
而沒有其他參數)。
使用docker start
,如問題1437中所述 ,將執行ENTRYPOINT
,但僅使用CMD
參數(因此使用CMD
,但不能在命令行上使用您自己的參數覆蓋它)。
如果要使用CMD,則需要docker run
,而不是docker start
。
實際上,最近有一個正在進行的PR ( PR 19746 ),它允許--cmd
start命令使用可選的--cmd
( -c
)標志來指定要使用的cmd,而不是cmd / entrypoint中的默認cmd。
Dockerfile官方文檔現在具有“ 了解CMD和ENTRYPOINT如何交互 ”部分:
- Dockerfile應至少指定
CMD
或ENTRYPOINT
命令之一。- 使用容器作為可執行文件時,應定義
ENTRYPOINT
。- 應將
CMD
用作為ENTRYPOINT
命令定義默認參數或在容器中執行自定義命令的方式。- 使用替代參數運行容器時,
CMD
將被覆蓋。
這意味着,如果您的Dockerfile包含:
沒有
CMD
:
- 如果沒有
ENTRYPOINT
:錯誤,則不允許ENTRYPOINT exec_entry p1_entry
表示/bin/sh -c exec_entry p1_entry
ENTRYPOINT ["exec_entry", "p1_entry"]
表示exec_entry p1_entry
CMD ["exec_cmd", "p1_cmd"]
(一個命令,一個參數)
- 如果沒有
ENTRYPOINT
:exec_cmd p1_cmd
,ENTRYPOINT exec_entry p1_entry
表示/bin/sh -c exec_entry p1_entry exec_cmd p1_cmd
ENTRYPOINT ["exec_entry", "p1_entry"]
表示exec_entry p1_entry exec_cmd p1_cmd
CMD ["p1_cmd", "p2_cmd"]
- 如果沒有
ENTRYPOINT
:p1_cmd p2_cmd
ENTRYPOINT exec_entry p1_entry
表示/bin/sh -c exec_entry p1_entry p1_cmd p2_cmd
(好)ENTRYPOINT [“exec_entry”, “p1_entry”]
表示exec_entry p1_entry p1_cmd p2_cmd
CMD exec_cmd p1_cmd
:
- 如果沒有
ENTRYPOINT
:/bin/sh -c exec_cmd p1_cmd
ENTRYPOINT exec_entry p1_entry
表示/bin/sh -c exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd
ENTRYPOINT [“exec_entry”, “p1_entry”]
表示exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.