Watchtower作用
Watchtower 是一个轻量级的开源容器管理工具,可以自动更新 Docker 容器镜像。它监视您的 Docker 环境中可用映像版本的更改,并使用最新映像自动拉取和更新容器。
Watchtower时间间隔调整
默认情况下,Watchtower 每 86400 秒(24 小时)检查一次运行容器化应用程序的 Docker 映像是否有更新。不过,根据您的需要,“WATCHTOWER_POLL_INTERVAL”和“WATCHTOWER_SCHEDULE”环境变量可以更改此间隔。
environment: WATCHTOWER_POLL_INTERVAL: 21600 WATCHTOWER_SCHEDULE: "0 30 11 * * *"
|
清理旧的 Docker 镜像
默认情况下,Watchtower 在下载新镜像时不会删除旧的 Docker 镜像。随着时间的推移,这可能会导致数百个孤立的进程占用磁盘空间。
为了避免这种情况,您可以将“WATCHTOWER_CLEANUP”环境变量设置为“true”,这将在使用新镜像重新启动容器后删除旧镜像。
“ WATCHTOWER_REMOVE_VOLUMES “更新后删除匿名卷。指定此标志后,watchtower 将在使用新镜像重新启动之前从容器中删除所有匿名卷。命名的卷不会被删除!
“ WATCHTOWER_ROLLING_RESTART “更新前执行健康检查,确保新容器启动成功后再移除旧容器。
docker-compose.yaml
version: "3" services: watchtower: container_name: watchtower image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock command: --cleanup --remove-volumes restart: always environment: WATCHTOWER_SCHEDULE: "0 0 4 * * *" WATCHTOWER_CLEANUP: true WATCHTOWER_REMOVE_VOLUMES: true WATCHTOWER_ROLLING_RESTART: true
|
然后,使用以下命令启动容器:
参考代码:
networks: app_network: external: true services: watchtower: image: containrrr/watchtower:latest volumes: - '/var/run/docker.sock:/var/run/docker.sock' - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_CLEANUP=true - WATCHTOWER_ROLLING_RESTART=true - WATCHTOWER_SCHEDULE=0 0 * * * ? - WATCHTOWER_NO_STARTUP_MESSAGE=true - WATCHTOWER_TIMEOUT=60s - WATCHTOWER_NOTIFICATION_EMAIL_DELAY=xx - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=xx - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=xx - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=465 - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=xx - WATCHTOWER_NOTIFICATION_EMAIL_TO=xx - WATCHTOWER_NOTIFICATION_EMAIL_FROM=xx - WATCHTOWER_NOTIFICATIONS=email - WATCHTOWER_NOTIFICATIONS_LEVEL=info container_name: watchtower restart: always networks: - app_network
|
更多参数详见文档
容器标签禁用监视更新
yaml
0102030405060708services: mysql: container_name: mysql image: mysql:8 。。。 labels: - com.centurylinklabs.watchtower.enable=false
|
以mysql为例:
- 在
compose
配置中添加labels
节点;
labels
节点下添加- com.centurylinklabs.watchtower.enable=false
关闭容器的监视更新;
- 此时
Watchtower
轮训检查时将会忽略mysql
容器。
