Docker

Docker CMD 指令中的多個命令

  • October 19, 2021

當我嘗試在執行時通過 Dockerfile 中的 CMD 指令執行兩個命令時,不明白髮生了什麼。我認為這應該可行:

CMD ["/etc/init.d/nullmailer", "start", ";", "/usr/sbin/php5-fpm"]

但它不起作用。容器尚未啟動。所以我不得不這樣做:

CMD ["sh", "-c", "/etc/init.d/nullmailer start ; /usr/sbin/php5-fpm"]

我不明白。這是為什麼?為什麼第一行不是正確的方法?有人可以向我解釋這些“CMD shell 格式與 JSON 格式等”的內容嗎?簡單來說。

請注意 -正如預期的那樣,command:指令 in也是如此。docker-compose.yml

我相信差異可能是因為第二個命令執行 shell 處理,而第一個命令沒有。根據官方文件,有execshell表格。您的第一個命令是一個exec表單。exec表單不會擴展環境變數,而表單shell會。exec由於它依賴於 shell 處理,通過使用該命令可能會失敗。您可以通過執行檢查這一點docker logs CONTAINERID

你的第二個命令,shell 形式,相當於 -

CMD /etc/init.d/nullmailer start ; /usr/sbin/php5-fpm

文件摘錄 -

注意:與 shell 形式不同,exec 形式不呼叫命令 shell。這意味著不會發生正常的外殼處理。例如,CMD [ "echo", "$HOME" ]不會對$HOME. 如果你想要 shell 處理,那麼要麼使用 shell 形式,要麼直接執行 shell,例如:CMD [ "sh", "-c", "echo", "$HOME" ].

引用自:https://serverfault.com/questions/685697