前言在早前部署Awesome TTRSS时,作者在docker-compose里配置了Watchtower,于是找到 Github 官方项目研究了下,根据官方文档简单整理了一下常用参数以备用.Watchtower 是一款实现自动化更新 Docker 镜像与容器的实用工具.它监控着所有正在运行的容器以及相关镜像,当检测本地镜像与镜像仓库中的镜像有差异时,会自动拉取最新镜像并使用最初部署时的参数重新启动相应的容器.containrrr/watchtower本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址.部署快速启动执行以下标准命令启动 Watchtower 容器,并每 5 分钟一次检查所有容器的镜像是否为最新版,如发现镜像更新将会自动停止容器,删除容器,拉取最新镜像,在以之前启动容器的命令启动容器. ``` docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower ``` 清理旧镜像镜像在更新后旧镜像标签会变为none,长期自动更新会导致过多的none镜像占用空间,加入--cleanup参数可以在每次更新后自动删除none镜像. ``` docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup ``` 指定容器更新 如无需自动更新所有稳定运行的容器,可以配置仅更新指定容器,只需要在命令后加上容器名.例如只更新nginx和redis. ``` docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup nginx redis ``` 注意指定容器需填写 容器名 ,并非镜像名.由于部分容器启动时可能没有定义 --name 参数,请执行 docker ps 查询核对容器名.配置自动更新频率Watchtower 默认每 5 分钟轮询一次,可以使用以下参数配置更新的频率.--interval,-i 配置更新周期,默认300秒.--schedule,-s 配置定时更新,使用Cron表达式,例如`0 0 1 * * * `即每天凌晨1点更新. 注意:当使用 -s 参数来配置定时更新时,由于容器内默认为 UTC 时间,上述设置的 凌晨1点 实际上是北京时间 早上9点 .可以通过加上 -e TZ=Asia/Shanghai 环境变量来定义时区,此时配置的时间则为北京时间. 每小时更新一次 ``` docker run -d --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup -i 3600 ``` ## 手动更新 ``` docker run -d --name watchtower --restart always -e TZ=Asia/Shanghai -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup -s 0 0 1 * * * ``` 使用手动更新的方式,运行一次Watch tower容器来更新所需的容器,更新后会自动删除本次运行的Watch tower容器.只需要加上--rm和--run-once参数即可.同时也可以配合以上指定容器或指定排除容器的参数来使用. 手动更新所有容器 ``` docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once ``` 手动更新指定容器 ``` docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once nginx redis ``` 注意指定容器需填写 容器名 ,并非镜像名.由于部分容器启动时可能没有定义 --name 参数,请执行 docker ps 查询核对容器名. 手动运行更新时会出现以下消息,表示正在更新,请耐心等待几分钟.time="2020-02-18T03:58:24Z" level=info msg="Running a one time update."随后提示找到更新镜像,停止容器,更新镜像,重启容器并移除旧镜像.至此更新完毕. time="2020-02-18T04:02:45Z" level=info msg="Found new xxxx/xxxx:latest image (sha256:10383f5b5720d7e1fxxxx137034c69b7f6xxxxxxafcc4e9d508b561af77)" time="2020-02-18T04:02:45Z" level=info msg="Stopping /xxxx (2e9ce1ebe319f3a35d80bxxxxxxxxxx6763ada155da957acb24fe76fc8a8c5) with SIGTERM" time="2020-02-18T04:02:46Z" level=info msg="Creating /xxxx" time="2020-02-18T04:02:46Z" level=info msg="Removing image sha256:ff4ee4caaa237174080c0d545xxxxxxxxxxxxxxx5d740ddc51e7737839cb5" ## docker-compose写法 version: "3" services: watchtower : image: containrrr/watchtower container_name: watchtower restart: always tty: true hostname: bili-help volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=Asia/Shanghai command: nginx redis --cleanup --schedule "0 0 4 * * *" 结语 其他更多参数以及功能请参考官方文档: 官方文档 Documentation 本文为 Stille 原创文章.经实践,测试,整理发布.如需转载请联系作者获得授权,并注明转载地址. 本文链接 https://www.ioiox.com/archives/84.html WMI Scripting HTML 当前访问者IP地址及地址归属: Last modification:April 17th, 2023 at 06:33 pm © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments