我有一些使用某些图像的容器,其中一部分在启动时无需启动某项服务
所以我想要动态启动一些服务,避免更改我的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或添加图像?
答案 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或类似方法。