我已经从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。
即使CMD记录在Dockerfile中,它实际上也是运行时信息。就像EXPOSE一样,但是与RUN和ADD相反。通过这个,我的意思是您可以稍后在扩展的Dockerfile中覆盖它,或者在您正在运行的run命令中对其进行简单覆盖。在任何时候,只能有一个CMD。
如果您想运行多种服务,我确实会使用主管。您可以为每个服务创建一个主管配置文件,将它们添加到目录中,然后运行主管supervisord -c /etc/supervisor以指向一个主管配置文件,该文件将加载所有服务,并且看起来像
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-遗产/