使用docker-compose exec在容器运行时不执行命令

109次阅读
没有评论

问题描述

在使用docker-compose时,遇到了一个问题。他在一个docker-compose-custom.yml文件中定义了一个服务,并希望在该服务运行后,在容器内执行一个简单的命令。他尝试使用docker-compose exec命令来执行命令,但是命令没有执行,控制台没有任何输出,只是返回了。他希望知道如何使命令执行成功。
用户的docker-compose版本是1.29.2。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据回答1,你的命令语法有误。正确的命令应该是:

docker-compose -f docker-compose-custom.yml exec myapp-back-preproduction npm install

在这个命令中,-f选项用于指定docker-compose文件的路径,exec命令用于在运行的容器中执行命令,myapp-back-preproduction是你的服务名称,npm install是你要执行的命令。

方案2

根据回答2,你可以使用docker exec -it <container> <command>命令在运行的容器中执行命令。这个命令允许你在容器内启动一个交互式的shell会话,非常方便。
不过,你需要注意为什么需要调用npm命令。如果这是运行你的应用程序所必需的,应该在Dockerfile中完成(或者可以在启动脚本中完成)。
请注意,只有在容器实际运行应用程序时(即入口点调用没有返回时),容器才会保持运行状态。因此,启动一个非活动的容器,然后手动运行应用程序是行不通的。容器将立即停止。

方案3

根据回答3,你可以尝试以下命令来执行你的命令:

docker-compose exec container_name npm install xxx

在这个命令中,container_name是你的容器名称,npm install xxx是你要执行的命令。
请注意,这只是一个示例命令,你需要将container_name替换为你实际的容器名称,并将npm install xxx替换为你要执行的实际命令。
以上是几种可能的解决方案,你可以根据自己的需求选择适合的方法来执行命令。

正文完