如何在进程启动后执行docker命令

时间:2017-04-17 22:25:10

标签: docker docker-compose dockerfile microservices consul

我为一个服务写了一个Dockerfile(我有一个指向启动进程的脚本的CMD)但是在进程启动后我无法运行任何其他命令?我试过用'&'在后台运行该进程,以便其他命令在进程启动后运行,但它不起作用?关于如何实现这个的任何想法?

例如,考虑我启动了一个数据库服务器并且只想在数据库进程启动后运行一些脚本,我该怎么做?

修改1:

我的具体用例是我正在运行Rabbitmq服务器作为服务,我想创建一个新用户,让他成为管理员,并在容器中启动服务后删除默认的来宾用户。我可以通过登录docker容器手动完成它,但我希望通过将这些附加到启动rabbitmq服务但不起作用的shell脚本来实现自动化。

感谢任何帮助!

此致

2 个答案:

答案 0 :(得分:1)

特别是围绕Rabbit MQ的问题 - 您可以创建一个rabbitmq.config文件,并在创建docker镜像时将其复制。

在该文件中,您可以指定从头开始设置数据库时将创建的default_userdefault_pass,请参阅https://www.rabbitmq.com/configure.html

针对一般问题的AS - 您可以将入口点更改为运行您需要的任何内容和所需服务的脚本,而不是服务的运行脚本

答案 1 :(得分:0)

我部分理解你的问题。基于我从您的问题中看到的内容,我建议您提及“复制”命令,将要运行的脚本复制到dockerfile中。构建映像并运行容器后,启动db服务。然后执行容器并进入容器,手动运行脚本。

如果您在dockerfile中有 CMD 命令,那么它将被您在执行期间指定的命令覆盖。所以,除非你在dockerfile中没有CMD,否则我认为你没有其他选择来运行脚本。