Duke Yin's Technology database

群晖Synology更新Docker容器方法

事实上Docker容器不存在更新一说,只有替换,用新的替换旧的以达到“更新”的目的

群晖Docker“更新”操作步骤如下:

  1. 打开Docker“注册表”,搜索想要“升级”的docker并双击下载最新版
  2. 回到“容器”,停止正在运行的容器,并“编辑”,将其重命名为“原名称-backup”
  3. 检查第一步下载是否完成,完成后进入下一步
  4. 回到“容器”,点击已停止的容器,点击“设置”,点击“复制设置”,名称改为原有名称。应用。
  5. 启动新复制出来的容器。

如果出现问题,可以以旧容器运行,如果没有问题,一段时间后删除旧容器即可。

有可能出现的问题:

1端口

如果旧的容器有 本地端口–>容器端口 的端口映射,复制出来的新容器会因为端口与旧容器相同而不能完成端口映射,此时应将旧容器端口修改成另外一个,再把新容器端口填上正确的,即可。

2冗余镜像

当从docker.io拉取新版本的镜像后,群晖的Docker镜像仓库里会多出一个名称一样,但版本号为None的镜像。

使用SSH连接群晖后,用

sudo -i

切换到管理员身份,再运行以下命令可以查看到所有镜像:

docker images

返回如下:

REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
jellyfin/jellyfin     latest    d791368d5d98   3 days ago     927MB
syncthing/syncthing   latest    80fd74f28b88   5 weeks ago    30.4MB
jellyfin/jellyfin     none      b70459cca2d3   9 months ago   746MB

可以看到,jellyfin多出一个同名,但版本号为none的镜像。重复的镜像不仅占用空间,而且在群晖图形界面无法看到。

其原因是拉取Docker镜像没有指定版本号的话,默认会拉取版本号(tag)为“latest”的镜像,老的镜像和新的镜像版本号都是latest,就会把老镜像版本号挤掉,变成none。我们只需要保留tag为latest的即可。

解决方法是按上文步骤先完成Docker容器的更新,确定新容器正常运行,删除备份容器,再在命令行删除none版本镜像。因为旧容器和旧镜像是关联的,如果不先删除旧容器,是无法删除none这个镜像的。

按上述例子,删除了旧容器后,SSH执行如下命令,即可删除无用的镜像:

docker rmi b70459cca2d3

命令为docker rmi [镜像ID]

如果不记得镜像ID,可以用 docker images 命令查看。

# #

发布评论

5 评论

  1. csrf

    感谢!!用watchtower失败,用您的方法成功!!

  2. EarlK

    如果是带版本号的,又该怎么更新呢。

  3. 小柑橘

    感谢教程

文章被引用至

评论

标注 * 的为必填项。