eeacms/docker-cleanup该镜像基于meltwater/docker-cleanup并做了少量修改,用于定期清理退出的容器、未被运行中容器使用的镜像和卷。
警告:除非仔细排除,否则此脚本会删除所有退出的容器、数据卷容器和未使用的镜像。若将/var/lib/docker挂载到容器中,会清理所有未使用的数据卷。如果与您的系统或Docker版本不兼容,可能会删除所有卷,甚至正在运行的容器的卷。
通常,任何退出的Docker容器会保留在磁盘上,直到使用docker rm -v清理。同样,不再使用的镜像也会保留。对于频繁启停容器的集群节点或Jenkins构建从节点,大量退出的容器和旧镜像版本会占用磁盘空间,尤其是持续重建的SNAPSHOT镜像会留下未标记的<none>镜像。
/var/lib/docker时)默认参数可通过docker run -e标志设置容器环境变量来覆盖:
"ubuntu:trusty, ubuntu:latest",默认清理所有未使用镜像"ubuntu:trusty, ubuntu:latest""my-container1, persistent-data""database-vol, caching",使用**All**可保留所有卷true或false,默认true(持续循环运行)1启用更多调试输出docker version --format '{{.Client.APIVersion}}'查看主机API版本注意:
KEEP_IMAGES、KEEP_CONTAINERS和KEEP_CONTAINERS_NAMED使用左锚定正则表达式。例如,镜像foo/bar:tag可被以下任一匹配:
foo/bar:tagfoo/barfoo/b[[:alpha:]]*/bar.*/.*:tag.*:tagfoo/*:tag但不会被以下匹配:
foo/bazbar:tag/bar:tag[[:alpha:]]*:tag默认情况下,所有
KEEP_*变量均设为**None**(等同于空字符串)。若要保留所有镜像、卷或容器(禁用对应清理功能),应使用**All**。
该镜像使用Docker客户端列出和删除容器及镜像,因此需要将Docker客户端和套接字映射到容器中。若映射/var/lib/docker目录,脚本还会清理孤立的Docker卷。
yamlcleanup: image: eeacms/docker-cleanup:2.1.0 environment: CLEAN_PERIOD: '86400' # 清理间隔:24小时 DEBUG: '0' # 禁用调试输出 DELAY_TIME: '900' # 延迟时间:15分钟 KEEP_CONTAINERS: '**All**' # 保留所有容器 KEEP_CONTAINERS_NAMED: '**All**' # 保留所有命名容器 KEEP_VOLUMES: '**None**' # 不保留未使用卷 KEEP_IMAGES: rancher/, busybox, tianon/ # 保留指定镜像 LOOP: 'true' # 循环运行 labels: io.rancher.scheduler.global: 'true' # 在所有节点运行 io.rancher.scheduler.affinity:host_label_ne: janitor.exclude=true # 排除特定节点 privileged: true volumes: - /var/run/docker.sock:/var/run/docker.sock # 映射Docker套接字 - /var/lib/docker:/var/lib/docker # 映射Docker数据目录(用于卷清理)
在/etc/systemd/system/docker-cleanup.service创建Systemd单元文件。使用CoreOS和Fleet时,添加X-Fleet部分以在所有集群节点调度该单元:
[Unit] Description=Cleanup of exited containers and unused images/volumes After=docker.service Requires=docker.service [Install] WantedBy=multi-user.target [Service] Environment=IMAGE=eeacms/docker-cleanup:latest NAME=docker-cleanup # 允许docker pull有足够时间 TimeoutStartSec=600 # 失败时重启 KillMode=none Restart=always RestartSec=15 ExecStartPre=-/usr/bin/docker kill $NAME ExecStartPre=-/usr/bin/docker rm $NAME ExecStartPre=-/bin/sh -c 'if ! docker images | tr -s " " : | grep "^${IMAGE}:"; then docker pull "${IMAGE}"; fi' ExecStart=/usr/bin/docker run \ -v /var/run/docker.sock:/var/run/docker.sock:rw \ -v /var/lib/docker:/var/lib/docker:rw \ --name=${NAME} \ $IMAGE ExecStop=/usr/bin/docker stop $NAME [X-Fleet] Global=true # 在所有节点运行
使用garethr-docker模块:
classes: - docker::run_instance docker::run_instance: 'cleanup': image: 'eeacms/docker-cleanup:latest' volumes: - "/var/run/docker.sock:/var/run/docker.sock:rw" - "/var/lib/docker:/var/lib/docker:rw"
bashdocker run \ -v /var/run/docker.sock:/var/run/docker.sock:rw \ -v /var/lib/docker:/var/lib/docker:rw \ eeacms/docker-cleanup:latest
可使用Kubernetes DaemonSet配置在集群所有节点运行eeacms/docker-cleanup容器:
bashkubectl create -f contrib/k8s-daemonset.yml
包含Makefile以帮助开发中的重复命令:
bashmake help
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务