docker-compose:在docker-compose.yml中运行后自动删除容器的选项


24

docker-compose run参考指出,它有--rm选项

运行后取出容器。

run对于我在中指定的某些服务,我想将此设为默认行为docker-compose.yml

所以,问题是

  1. 能以某种方式指定 docker-compose.yml吗?
  2. 如果可以,我该怎么办?

INB4“使用bash别名,卢克!”:当然,我可以docker-compose.yml通过设置一些bash别名来强制执行此操作,alias docker-compose-run='docker-compose run --rm'但是我对如何通过docker-compose.yml而不是某些外部方式完全执行强制执行感兴趣。)

Answers:


10

TLDR:2018-11 仍然不可能;使用docker-compose downdocker-compose run --rm

我想给这个问题提供一个更新的答案,因为已经快三年了。这将节省其他人的搜索。

我有同样的问题,这是我找到的解决方法(包括问题本身中的一种):

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

[...]运行传递的命令将覆盖服务 配置中定义的命令

[...]该命令不会创建服务配置中指定的任何端口。这样可以防止端口与已经打开的端口发生冲突。如果确实要创建服务的端口并将其映射到主机,请指定--service-ports标志

docker-compose rm -f

-f,--force不要要求确认删除


8

它不是Dockerfileor docker-compose.yml规范的一部分,它只是run命令的cli选项,因此答案是否定的。您将需要依靠外部的东西来执行。

如果您有用于项目的构建工具,通常最好将docker-compose任务包装在一起。例如,我们的gradle项目提供了与docker相关的任务,这些任务设置了一些默认选项,例如--rm运行任务。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.