在 Dockerfile 中运行两个 CMD 服务

在 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" ]

答案1

请考虑一下您打算在这里做什么,因为您的方法在某种程度上超出了 Docker 的最佳实践。

简而言之,docker 最佳实践是:您不应该启动两个应用程序,而只能在 docker 容器中启动一个应用程序。这一建议是有道理的,因为当一个应用程序退出时,docker 会停止容器。如果你有不止一个,那你基本上就完蛋了。

但是......有一些解决方法可以帮助您:

  • 简单的是:启动单个 shell 脚本,该脚本启动两个应用程序,然后进入永无止境的循环。

  • 使用像supervisord这样的解决方案,它允许并行处理多个应用程序/服务。

两种解决方案的文档都可以在这里找到:https://docs.docker.com/config/containers/multi-service_container/

我个人的偏好是使用共享卷和单独的 Docker 容器。 (您仍然可以使用 docker-compose 将它们粘合在一起)。使用它,您可以完全控制每个应用程序,而且非常简单直接。

相关内容