Docker

在一個 Dockerfile 中執行兩個 CMD 服務

  • May 6, 2019

我想問一下是否可以執行 2 CMD 命令。我知道我們不能,如果我們輸入 2 個 CMD 命令,它只會執行最後一個。這是我嘗試過的:

CMD bash /start-script.sh && /usr/bin/supervisord -c /etc/supervisord.conf

但它不執行這兩種服務。

這裡是分開的CMD

CMD ["/start-script.sh"]
ENTRYPOINT [ "/entrypoint.sh" ]
CMD [ "/usr/bin/supervisord", "-c", "/etc/supervisord.conf" ]

請考慮一下您打算在這裡做什麼,因為您的方法在某種程度上超出了 Docker 的最佳實踐。

簡而言之 docker 最佳實踐:您不應該啟動兩個應用程序,而應該只在一個 docker 容器中啟動一個。這個建議是有道理的,因為當一個應用程序退出時 docker 會停止容器。如果你有不止一個,你基本上就完蛋了。

但是……有一些解決方法可以幫助您:

  • 最簡單的是:啟動單個 shell 腳本,它啟動兩個應用程序,然後進入一個永無止境的循環。
  • 使用像 supervisord 這樣的解決方案,它允許並行處理多個應用程序/服務。

兩種解決方案的文件都可以在這裡找到:https ://docs.docker.com/config/containers/multi-service_container/

我個人的偏好是使用共享捲和單獨的 docker 容器。(您仍然可以使用 docker-compose 將它們粘合在一起)。使用它,您可以完全控制每個應用程序,而且非常簡單直接。

引用自:https://unix.stackexchange.com/questions/517403