首页 > 解决方案 > docker stack deploy,restart_policy,删除退出的容器

问题描述

如何摆脱 docker swarm 中状态为“已退出”的容器?

docker stack deploy -c ./test.yml 测试

version: '3.3'
services:
  test-serv:
    image: redbom/test:latest
    user: "root"
    deploy:
      restart_policy:
        condition: any
        delay: 1s

image:redbom/test:latest - 是带有 bash sh 的测试图像:

#!/bin/bash
echo 'sllep 8'
sleep 8
exit 0

10分钟后:docker ps -a

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                      PORTS               NAMES
b7d26ca8382c        redbom/test:latest   "docker-php-entrypoi…"   4 seconds ago       Up 2 seconds                                    test_test-serv.1.5k0esbhtx0k6m7kmcuo5w3obs
0a7415032fa2        redbom/test:latest   "docker-php-entrypoi…"   14 seconds ago      Exited (0) 3 seconds ago                        test_test-serv.1.tq2fif5r0pny18ee248kisw6z
337cb3b7f1e1        redbom/test:latest   "docker-php-entrypoi…"   23 seconds ago      Exited (0) 13 seconds ago                       test_test-serv.1.hzdyhk9202le9oh9senuw38l3
21e06ac40795        redbom/test:latest   "docker-php-entrypoi…"   33 seconds ago      Exited (0) 23 seconds ago                       test_test-serv.1.i4poxgv4zfwrzl3ag25b5rco4
af85c618ba7d        redbom/test:latest   "docker-php-entrypoi…"   43 seconds ago      Exited (0) 33 seconds ago                       test_test-serv.1.b1jzxq2t2lb9e0tl5hqvzxr4t

如何配置test.yml,使状态为Exited的容器不存在?我想要,那个 docker stack 在它自己之后删除 Exited 容器。我不需要它们。

标签: dockerdocker-swarmdocker-stack

解决方案


您看到的是任务历史保留限制的结果,默认为 5。您可以将保留限制设置为docker swarm update --task-history-limit ${int}(确保将 ${int} 替换为整数)。我发现将值设置为 2 在清理退出的容器和仍然能够回滚失败的堆栈部署之间提供了一个很好的平衡。

不过,由于您不需要任务历史记录,请将其设置为 0。这应该会清除所有退出的容器(不过,不确定这是否适用于更改之前部署的服务)。


推荐阅读