Docker
在一個 Dockerfile 中執行兩個 CMD 服務
我想問一下是否可以執行 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 將它們粘合在一起)。使用它,您可以完全控制每個應用程序,而且非常簡單直接。