Docker
Docker CMD 指令中的多個命令
當我嘗試在執行時通過 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 處理,而第一個命令沒有。根據官方文件,有
exec
和shell
表格。您的第一個命令是一個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" ]
.