事实上Docker容器不存在更新一说,只有替换,用新的替换旧的以达到“更新”的目的
群晖Docker“更新”操作步骤如下:
- 打开Docker“注册表”,搜索想要“升级”的docker并双击下载最新版
- 回到“容器”,停止正在运行的容器,并“编辑”,将其重命名为“原名称-backup”
- 检查第一步下载是否完成,完成后进入下一步
- 回到“容器”,点击已停止的容器,点击“设置”,点击“复制设置”,名称改为原有名称。应用。
- 启动新复制出来的容器。
如果出现问题,可以以旧容器运行,如果没有问题,一段时间后删除旧容器即可。
有可能出现的问题:
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
命令查看。
#Docker #群晖