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

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

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

所以我得到这个想法,当docker run ,我可以开始通过env服务,我尝试,但它不工作。

我知道我可以使用docker exec启动服务,我想它开始,但是当我有这么多的服务启动,这是很难用这种方式

所以,我可以写命令环境variables启动服务,像这个docker run -e 'service rsyslog start' -ti container_iddocker run --env-file=env-file -ti container_id

和像这个service rsyslog start env文件

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

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

但看看https://docs.docker.com/engine/admin/using_supervisord/ ,把supervisord.conf放在一个卷中,并使用docker exec ...来启动/停止服务。

正如@mgansler提到的那样,Docker并不是真的被devise来做到这一点,至less不是最佳的。 您可能需要重新考虑您的应用程序环境,以便拥有某种智能控制器,根据config / envvariables根据需要调整Docker容器。

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

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