跳转至

Docker 无损升级容器镜像

本文以更新频繁的portainer镜像为例,介绍如何使用runlike工具升级已启动容器的镜像。

1 查看已启动的容器ID并停止运行

1.1 查看容器

Bash
docker ps -a

输出:

Bash
CONTAINER ID   IMAGE                   NAMES
70476c317017   portainer/portainer-ce  portainer

1.2 停止容器

Bash
docker stop 70476c317017

2 使用pip安装runlike工具

Bash
pip install runlike

3 使用runlike工具获取容器启动命令并替换

Bash
runlike 70476c317017

输出:

Bash
docker run --name=portainer --hostname=70476c317017 --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --volume=/var/run/docker.sock:/var/run/docker.sock --volume=portainer_data:/data --volume=/data --workdir=/ -p 8000:8000 -p 9000:9000 --restart=always --runtime=runc --detach=true portainer/portainer-ce

4 创建新的容器并继承原有容器配置和数据

为了避免容器命名冲突,此处需要更改以下容器名称,然后拷贝以上命令即可得到更新镜像后的容器。

Bash
docker run --name=portainer_new --hostname=70476c317017 --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --volume=/var/run/docker.sock:/var/run/docker.sock --volume=portainer_data:/data --volume=/data --workdir=/ -p 8000:8000 -p 9000:9000 --restart=always --runtime=runc --detach=true portainer/portainer-ce

5 清理旧的容器

Bash
docker rm 70476c317017

6 在群晖DSM中更新容器镜像

  1. 打开Docker应用程序
  2. 单击侧边栏的注册表
  3. 在搜索栏中,键入容器的名称(例如portainer-ce
  4. 右键点击下载此映像,等待下载完毕,DSM会发出通知
  5. 单击侧边栏的容器
  6. 选择要更新的容器,右键点击操作——停止
  7. 容器停止后,右键点击操作——重置
  8. 等待重置完毕后,右键点击操作——启动即可

警告

未映射到外部的容器数据可能会丢失

参考资料