如何优雅的一键升级宝塔面板多个Docker容器。

目前老张在自己的宝塔面板Docker里部署了好几个项目,Alist、ChatGPT-web、Trilium、思源笔记这四个常用的项目。对于这几个项目里,更新频率最高的就是思源笔记了。我在《宝塔面板下利用Docker部署思源笔记!》等几篇关于宝塔面板Docker的文章里也有说法,如果官方项目版本更新之后,需要将本地的容器和镜像删除之后,重新拉取最新的镜像,然后再新建容器进行重新配置,这样真的很麻烦。

后来经过向度娘请教之后,发现很多人在群晖里升级Docker容器用了watchtower这个项目来自动升级Docker里的项目容器,我便把他搬到了宝塔里来了。

watchtower本身也是Docker里一个项目,但是我们这次使用他是在宝塔面板的"计划任务"里。打开宝塔的"计划任务"新建一个"shell脚本",执行周期可以设置成每周执行一次。而脚本内容可以按需复制以下代码:

1.运行一次,更新所有的容器,并清除旧的容器 。

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once

2.运行一次,更新所有的容器,并清除旧的容器,并删除watchtower容器。

docker run --rm --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once

3.指定容器更新,如无需自动更新所有稳定运行的容器,可以配置仅更新指定容器,只需要在命令后加上容器名.例如只更新nginx和redis。

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once nginx redis

有了这个神项目,就不再需要手动更新docker容器了。

 

 

😊

评论区

共 24 条评论
  1. 头像
    空空裤兜 Lv.10
    虽然搭了几个容器,还是没明白docker到底该咋操作
    3年前
    1. 头像
      老张 博主
      @空空裤兜 开车的不必研究车的原理,能用就行。
      3年前
      1. 头像
        空空裤兜 Lv.10
        @老张 代码抄走了,不用手动搞了,也不会学watchtower的配置了,定时任务简单啊
        2年前
  2. 头像
    小熊 Lv.4
    折腾不动了,docker不懂,哈哈哈
    3年前
    1. 头像
      老张 博主
      @小熊 非常简单
      3年前
  3. 头像
    老刘 Lv.10
    有了这个方便多了
    3年前
    1. 头像
      老张 博主
      @老刘 是的,设置每周执行一次,永远不需要手动更新
      3年前
  4. 头像
    网友小宋 Lv.10
    我一般都手动更新
    3年前
    1. 头像
      老张 博主
      @网友小宋 试试这个,非常方便。
      3年前
  5. 头像
    跟大佬又学到了一招
    3年前
  6. 头像
    平顶山 Lv.3
    我的vps就放一个博客,浪费。。。
    3年前
    1. 头像
      老张 博主
      @平顶山 那真的是浪费了,要多利用起来
      3年前
  7. 头像
    林羽凡 Lv.10
    果然还是老张专业呀
    3年前
    1. 头像
      老张 博主
      @林羽凡 没有你专业呀。
      3年前
  8. 头像
    老麦 Lv.10
    有些项目我是能不更新就不更新,有些我是一出新版本我就选择更新,所以我一般选择手动更新。
    3年前
    1. 头像
      老张 博主
      @老麦 主要是思源更新太快,功能也多。
      3年前
  9. 头像
    美樂地 Lv.10
    docker占内存不?
    3年前
    1. 头像
      老张 博主
      @美樂地 看项目的,
      3年前
  10. 头像
    news360 Lv.1
    学习了~docker是个好东西;但是究竟要怎样用好它呢
    3年前
  11. 头像
    Roy
    这样会影响数据吗,担心数据会丢失
    2年前
    1. 头像
      老张 博主
      @Roy 不会的,放心用
      2年前
      1. 头像
        Roy
        @老张 十分感谢
        2年前
      2. 头像
        Roy
        @老张 docker: Error response from daemon: Conflict. The container name "/watchtower" is already in use by container "a4781562b7e488c3a0d588a88254678e5a0f6d46a337d2823d522afb92c7cca2". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'. 运行了提示这个
        2年前
        1. 头像
          老张 博主
          @Roy 这个我还真没有问题过。
          2年前