一尘不染

为什么不能多次使用Docker CMD来运行多个服务?

docker

我已经从Dockerfile建立了一个名为centos + ssh的基础映像。在centos +
ssh的Dockerfile中,我使用CMD运行ssh服务。

然后我想构建一个运行其他服务的图像,该服务名为rabbitmq,Dockerfile:

FROM centos+ssh
EXPOSE 22
EXPOSE 4149
CMD /opt/mq/sbin/rabbitmq-server start

要启动rabbitmq容器,请运行:

docker run -d -p 222:22 -p 4149:4149 rabbitmq

但是ssh服务不起作用,它感觉到Rabbitmq的Dockerfile CMD覆盖了centos的CMD。

  1. CMD如何在docker映像中工作?
  2. 如果要运行多个服务,该怎么办?使用主管?

阅读 929

收藏
2020-06-17

共1个答案

一尘不染

即使CMD记录在Dockerfile中,它实际上也是运行时信息。就像EXPOSE一样,但是与RUN和ADD相反。通过这个,我的意思是您可以稍后在扩展的Dockerfile中覆盖它,或者在您正在运行的run命令中对其进行简单覆盖。在任何时候,只能有一个CMD。

如果您想运行多种服务,我确实会使用主管。您可以为每个服务创建一个主管配置文件,将它们添加到目录中,然后运行主管supervisord -c /etc/supervisor以指向一个主管配置文件,该文件将加载所有服务,并且看起来像

[supervisord]
nodaemon=true

[include]
files = /etc/supervisor/conf.d/*.conf

如果您想了解更多详细信息,我在这里写了一个关于此主题的博客:http :
//blog.trifork.com/2014/03/11/using-supervisor-with-docker-to-manage-
processes-supporting-image-遗产/

2020-06-17