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

Iva*_*hek 36 containers docker

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而不是通过某种外部方式来强制执行此操作。)

小智 21

TLDR:2018-11仍然不可能;使用docker-compose downdocker-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
Run Code Online (Sandbox Code Playgroud)

永远不会删除定义为外部的网络和卷。

虽然你不能在docker-compose.yml里面声明它会给你带来一些麻烦;尤其是卷和网络。

docker-compose run --rm

--rm - 运行后删除容器。在分离模式下被忽略。

对服务运行一次性命令。例如,以下命令启动 Web 服务并运行 bash 作为其命令。

docker-compose run web bash
Run Code Online (Sandbox Code Playgroud)

[...] run 传递的命令会覆盖服务 配置中定义的命令

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

docker-compose rm -f

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


Eri*_*erg 11

它不是Dockerfileordocker-compose.yml规范的一部分,它只是 run 命令的 cli 选项,所以答案是否定的。你将需要依靠外部的东西来强制执行。

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