Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在进程启动后执行docker命令_Docker_Docker Compose_Dockerfile_Microservices_Consul - Fatal编程技术网

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

如何在进程启动后执行docker命令,docker,docker-compose,dockerfile,microservices,consul,Docker,Docker Compose,Dockerfile,Microservices,Consul,我为一个服务编写了一个Dockerfile(我有一个指向启动该进程的脚本的CMD),但在进程启动后我不能运行任何其他命令?我尝试使用“&”在后台运行进程,以便在进程启动后运行其他命令,但它不起作用?你知道如何实现这一目标吗 例如,考虑我启动了一个数据库服务器,只想在数据库进程启动之后运行一些脚本,我该怎么做? 编辑1: 我的具体用例是,我将Rabbitmq服务器作为服务运行,我希望创建一个新用户,让他成为管理员,并在容器中启动服务后删除默认的来宾用户。我可以通过登录docker容器来手动完成,但

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

例如,考虑我启动了一个数据库服务器,只想在数据库进程启动之后运行一些脚本,我该怎么做? 编辑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实现它。