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

How to execute docker commands after a process has started

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

例如,假设我启动了一个数据库服务器并想 运行 仅在数据库进程启动后才执行一些脚本,我该怎么做?

编辑 1:

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

感谢任何帮助!

此致

我部分理解了你的问题。根据我从您的问题中了解到的情况,我建议您提及 Copy 命令以将您想要 运行 的脚本复制到 dockerfile 中。构建映像和 运行 容器后,启动数据库服务。然后执行容器并进入容器,手动运行脚本。

如果你在dockerfile中有CMD命令,那么它会在执行过程中被你指定的命令覆盖。所以,我认为你没有任何其他选项来 运行 脚本,除非你在 dockerfile 中没有 CMD。

特别是关于您的 Rabbit MQ 问题 - 您可以创建一个 rabbitmq.config 文件并在创建 docker 图像时复制它。

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

对于一般问题 - 您可以将入口点更改为 运行 脚本,无论您需要什么和您想要的服务,而不是服务 运行 脚本