这docker-compose run
参考表示它有权--rm
选择
运行后移除容器。
我想将此run
作为我在中指定的某些服务的默认行为docker-compose.yml
。
因此,问题是:
- 可以以某种方式指定吗
docker-compose.yml
? - 如果可以,我该怎么做?
(INB4“使用 bash 别名,卢克!”:当然,我可以docker-compose.yml
通过设置一些 bash 别名来强制执行这一点alias docker-compose-run='docker-compose run --rm'
,但我感兴趣的是如何通过docker-compose.yml
而不是通过某种外部方式来强制执行这一点。)
答案1
TLDR:这是仍然不可能 2018-11;使用docker-compose down
或docker-compose run --rm
我想对这个问题给出一个更新的答案,因为已经快 3 年了。这将节省其他人的搜索时间。
我有同样的问题,以下是我找到的解决方法(包括问题本身的解决方法):
docker-compose down
其作用如下:
停止容器并删除由 up 创建的容器、网络、卷和图像。
默认情况下,唯一删除的是:
- Containers for services defined in the Compose file - Networks defined in the networks section of the Compose file - The default network, if one is used
定义为外部的网络和卷永远不会被删除。
尽管你不能在其中声明它,但docker-compose.yml
它可以为你省去一些麻烦;特别是在卷和网络方面。
docker-compose run --rm
--rm - 运行后删除容器。在分离模式下忽略。
针对服务运行一次性命令。例如,以下命令启动 Web 服务并运行 bash 作为其命令。
docker-compose run web bash
[...] 运行传递的命令覆盖服务中定义的命令 配置。
[...] 命令不创建任何端口在服务配置中指定。这可以防止与已打开的端口发生端口冲突。如果你确实希望创建服务的端口并映射到主机,指定--服务端口旗帜
docker-compose rm -f
-f, --force 不要求确认删除
答案2
它不是Dockerfile
或docker-compose.yml
规范的一部分,它只是运行命令的 cli 选项,所以答案是否定的。您需要依赖一些外部的东西来执行。
如果您的项目有构建工具,通常最好用它来包装 docker-compose 任务。例如,我们的 gradle 项目提供了与 docker 相关的任务,这些任务设置了一些默认选项,例如--rm
运行任务。