【问题标题】:Auto remove container with docker-compose.yml使用 docker-compose.yml 自动删除容器
【发布时间】:2018-04-22 18:54:09
【问题描述】:

docker-compose run 有一个标志--rm,它会在运行后自动删除容器。我想知道对于特定服务是否有与 docker-compose.yml 等效的配置,因为我在 yml 中获得的服务之一是一次性构建过程,它应该只输出编译文件并自行消失。

【问题讨论】:

  • 2018-11 仍然不可能 :(不要像我一样浪费时间搜索(至少在接下来的几个月内不会;))
  • 我将docker-compose up -d && docker-compose rm -f 用于类似的场景。
  • @MauriceMüller 你不知道有没有更新吗?

标签: docker docker-compose


【解决方案1】:

我没有找到任何选项来帮助您在 docker-compose.yml 文件中定义此行为,我认为解释是它会破坏某些 docker-compose ... 命令的工作方式。

更多关于 up/down , start/stop 的事情:

docker-compose up 为服务构建、(重新)创建、启动和附加到容器。

由于您的images 已构建并且您的服务的containers 已启动,您可以使用docker-compose stopdocker-compose start 来启动/停止您的服务。这与docker-compose down 不同:

停止容器并删除由up 创建的容器、网络、卷和映像。

您正在尝试做的事情有问题:

如果您docker-compose up 并且您的一个容器完成了它的任务并被(自动)删除,那么您不能再次docker-compose stopdocker-compose start。被移除的容器将不会再出现start它。


你可能想看看:

【讨论】:

  • 是的,这证实了我的研究被接受为答案。如果有一个选项,那就太好了,因为其中一个容器就在那里进行一次 webpack 生产构建。猜猜需要为它写bash
  • 检查docker-compose rm是否符合您的需求...https://docs.docker.com/compose/reference/rm/
【解决方案2】:

只需运行docker-compose up && docker-compose rm -fsv?

?https://docs.docker.com/compose/reference/rm

【讨论】:

  • 这有帮助,但我仍然希望 docker-compose up 有一个 --rm 标志,就像 docker run 一样。
  • @Iwazaru docker-compose up -V?
【解决方案3】:

我对此的解决方案是创建一个小 bash 脚本,之后会自动删除容器。

如果您使用的是 macOS,则可以将此脚本放入 usr/local/bin。假设它被命名为dco,那么您可以运行chmod +x usr/local/bin/dco 以使其可执行。在 Windows 上,我不知道如何让它工作,但在 Linux 上应该是类似的。

#! /bin/bash

# check for -d, --detached
DETACHED=false
for (( i=1; i <= "$#"; i++ )); do
  ARG="${!i}"
  case "$ARG" in
    -d|--detach)
      DETACHED=true
      break
      ;;
  esac
done

if [[ $1 == "run" ]] && [[ $DETACHED == false ]]; then
    docker-compose run --rm "${@:2}"
elif [[ $1 == "up" ]] && [[ $DETACHED == false ]]; then
    docker-compose up "${@:2}"; docker-compose down
else
    docker-compose "${@:1}"
fi

编辑:更新了脚本,使分离模式可以正常工作,将break添加到artu-hnrq建议的循环中

【讨论】:

  • 不错的解决方案!然而你的for 在打开DETACHED 后仍然在循环。 using break 可以做一点改进
  • @artu-hnrq 感谢您的建议,添加它
【解决方案4】:

我不确定我是否理解,docker-compose run --user 是一个选项,并且 docker-compose.yml 支持用户密钥 (http://docs.docker.com/compose/yml/#working95dir-entrypoint-user-hostname-domainname-mem95limit-privileged-restart-stdin95open-tty-cpu95shares)。

【讨论】:

  • docker-compose -rm up 据我研究不支持。想知道 docker-compose.yml 中是否有可用的 rm 密钥。我翻阅了文档找不到它。
【解决方案5】:

这个问题发布已经有一段时间了,但我认为在 2022 年分享一些对我的案例有用的东西会很有帮助:) 但请记住,此解决方案仍然不会像原作者打算实现的那样删除旧容器。

docker-compose up --force-recreate -V

就我而言,我有一个小型 Redis 集群,我希望在我停止服务器后完全擦除其中的数据。 只使用--force-recreate 并没有成功,因为匿名卷仍然被重用。这就是-V 的用武之地。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 2016-08-21
    • 2015-12-30
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多