我可以在docker容器中通过env启动服务吗?

时间:2016-08-15 02:37:14

标签: docker

我有一些使用某些图像的容器,其中一部分在启动时无需启动某项服务

所以我想要动态启动一些服务,避免更改我的init.sh或dockerfile,并重新生成我的图像

所以我明白了这个想法,我可以在docker run开始使用env服务,我尝试一下,但它不起作用。

我知道我可以使用docker exec启动我想要启动的服务,但是当我开始提供这么多服务时,使用这种方式就太难了

那么,我可以将命令编写为环境变量来启动服务,就像这样 docker run -e 'service rsyslog start' -ti container_id 要么 docker run --env-file=env-file -ti container_id

和这样的env文件 service rsyslog start

如何动态启动某些服务,避免更改我的dockerfile或添加图像?

2 个答案:

答案 0 :(得分:1)

docker背后的整个想法是每个容器都有一个进程/服务。

但请查看https://docs.docker.com/engine/admin/using_supervisord/,将supervisord.conf放入卷中,然后使用docker exec ...启动/停止服务。

答案 1 :(得分:0)

正如@mgansler所说,Docker并没有真正做到这一点,至少不是最佳选择。您可能想重新考虑您的应用程序环境,以便拥有某种智能控制器,根据config / env变量根据需要/适当调整Docker容器。

您还可以使用多个docker-compose文件来构建上下文环境并动态生成docker-compose up命令,请参阅:https://docs.docker.com/compose/production/

否则,更多以VM为中心的方法可能更合适,例如Vagrant或类似方法。

相关问题