如何在进程启动后执行 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_user
和 default_pass
,它们将在从头开始设置数据库时创建,请参阅 https://www.rabbitmq.com/configure.html
对于一般问题 - 您可以将入口点更改为 运行 脚本,无论您需要什么和您想要的服务,而不是服务 运行 脚本
我为服务编写了一个 Dockerfile(我有一个 CMD 指向启动该进程的脚本)但是我无法 运行 在该进程启动后执行任何其他命令?我尝试在后台使用“&”来 运行 进程,以便在进程启动后其他命令会 运行 但它不起作用?关于如何实现这一目标的任何想法?
例如,假设我启动了一个数据库服务器并想 运行 仅在数据库进程启动后才执行一些脚本,我该怎么做?
编辑 1:
我的具体用例是 运行将 Rabbitmq 服务器作为服务,我想创建一个新用户,让他成为管理员,并在服务在容器中启动后删除默认来宾用户。我可以通过登录到 docker 容器来手动执行此操作,但我想通过将这些附加到启动 rabbitmq 服务的 shell 脚本来自动化它,但这不起作用。
感谢任何帮助!
此致
我部分理解了你的问题。根据我从您的问题中了解到的情况,我建议您提及 Copy 命令以将您想要 运行 的脚本复制到 dockerfile 中。构建映像和 运行 容器后,启动数据库服务。然后执行容器并进入容器,手动运行脚本。
如果你在dockerfile中有CMD命令,那么它会在执行过程中被你指定的命令覆盖。所以,我认为你没有任何其他选项来 运行 脚本,除非你在 dockerfile 中没有 CMD。
特别是关于您的 Rabbit MQ 问题 - 您可以创建一个 rabbitmq.config
文件并在创建 docker 图像时复制它。
在该文件中,您可以指定 default_user
和 default_pass
,它们将在从头开始设置数据库时创建,请参阅 https://www.rabbitmq.com/configure.html
对于一般问题 - 您可以将入口点更改为 运行 脚本,无论您需要什么和您想要的服务,而不是服务 运行 脚本