在Docker容器中自动启动服务

Ped*_*dro 12 linux ubuntu docker linux-containers

我正在用docker做一些初步测试.我有我的图像,我可以运行一些容器,:

docker ps
Run Code Online (Sandbox Code Playgroud)

我这样做docker attach container_id并启动apache2服务.

然后从主控制台我将容器提交到图像.

退出容器后,如果我尝试启动容器或尝试从提交的映像运行一个新容器,则始终停止该服务.

如何在启动服务的情况下创建或重启一个容器,例如apache?

dam*_*ick 28

编辑:自从最初发布这个答案以来,我已经学到了很多关于Docker的知识."在Docker容器中自动启动服务"对于Docker来说不是一个好的使用模式.相反,使用诸如fleet,Kubernetes甚至Monit/SystemD/Upstart/Init.d/Cron之类的东西来自动启动在Docker容器内执行的服务.

原始答案:如果您使用该命令启动容器/bin/bash,则可以按照此处概述的方式完成此操作:https://stackoverflow.com/a/19872810/2971199

因此,如果您正在启动容器,docker run -i -t IMAGE /bin/bash并且如果要在启动容器时自动启动apache2,请在容器中编辑/etc/bash.bashrc并添加/usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf(或任何apache2启动命令)到文件末尾的换行符.

将更改保存到您的映像并重新启动它,docker run -i -t IMAGE /bin/bash您将在附加时发现apache2正在运行.

  • `/ etc/bash.bashrc`将在每个bash启动时执行,这可能会导致问题,如果你以后想要与容器交互(例如执行`docker exec -ti ID bash`)...我认为这不是正确的放置apache2等服务的启动脚本的地方 (6认同)

bac*_*ler 5

您可以使用的选项是使用Supervisord等流程管理器来运行多个流程.有人用sshd和mongodb完成了这个:https://github.com/justone/docker-mongodb