我想问一下是否可以运行 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 将它们粘合在一起)。使用它,您可以完全控制每个应用程序,而且非常简单直接。