如何在进程启动后执行docker命令
我为一个服务编写了一个Dockerfile(我有一个指向启动该进程的脚本的CMD),但在进程启动后我不能运行任何其他命令?我尝试使用“&”在后台运行进程,以便在进程启动后运行其他命令,但它不起作用?你知道如何实现这一目标吗如何在进程启动后执行docker命令,docker,docker-compose,dockerfile,microservices,consul,Docker,Docker Compose,Dockerfile,Microservices,Consul,我为一个服务编写了一个Dockerfile(我有一个指向启动该进程的脚本的CMD),但在进程启动后我不能运行任何其他命令?我尝试使用“&”在后台运行进程,以便在进程启动后运行其他命令,但它不起作用?你知道如何实现这一目标吗 例如,考虑我启动了一个数据库服务器,只想在数据库进程启动之后运行一些脚本,我该怎么做? 编辑1: 我的具体用例是,我将Rabbitmq服务器作为服务运行,我希望创建一个新用户,让他成为管理员,并在容器中启动服务后删除默认的来宾用户。我可以通过登录docker容器来手动完成,但
例如,考虑我启动了一个数据库服务器,只想在数据库进程启动之后运行一些脚本,我该怎么做? 编辑1:
我的具体用例是,我将Rabbitmq服务器作为服务运行,我希望创建一个新用户,让他成为管理员,并在容器中启动服务后删除默认的来宾用户。我可以通过登录docker容器来手动完成,但我想通过将这些附加到启动rabbitmq服务的shell脚本来实现自动化,但这不起作用 感谢您的帮助问候我部分理解你的问题。根据我从您的问题中了解到的情况,我建议您使用Copy命令来复制要运行到dockerfile中的脚本。构建映像并运行容器后,启动db服务。然后执行容器并进入容器,手动运行脚本
如果dockerfile中有CMD命令,则在执行过程中指定的命令将覆盖该命令。因此,除非docker文件中没有CMD,否则我认为您没有任何其他选项来运行脚本。特别是针对Rabbit MQ的问题-您可以创建一个
rabbitmq.config
文件,并在创建docker映像时复制该文件
在该文件中,您可以指定当从头开始设置数据库时将创建的default\u用户
和default\u过程
,请参阅
至于一般问题-您可以将入口点更改为运行所需内容和所需服务的脚本,而不是服务的运行脚本如果您要运行数据库服务器,我建议您将其作为单独的容器运行。如果您要沿第一个进程运行另一个进程,
和
应该可以工作。我曾经写过一个脚本,在mysql日志上使用cat
和grep
,在我需要一个快速而肮脏的解决方案时寻找“启动成功”。你是否尝试过RUN
?我不是特别指数据库服务器,而是以它为例。RUN可用于在创建docker映像时运行,但我希望我的命令仅在容器和服务启动后运行,因为我的命令要求服务启动并运行。我知道的一种方法是在shell脚本中使用&并将其作为后台进程运行,但这不起作用,我不知道为什么。还有别的办法吗?更新了我面对的兔子问题谢谢!我认为这是一个好主意,我将为Rabbit MQ实现它。