背景:
因为需要安装新的容器,所以需要升级docker,从1.13.1 版本升级到 20.10.9。升级之后原有的容器依然可以正常启动运行,数据没有发生丢失情况。
1、卸载原有版本.
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、安装 yum-utils 包 ,设置存储库
yum-utils 包(它提供 yum-config-manager 实用程序),这里用的是阿里云的镜像地址.
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum update

3、查询目前的yum源里的docker 版本
下面会列出当前可用的版本,如果查询的结果是空,那么就说明上一步的yum源没更新成功,需要检查镜像地址的设置和更新是否成功.
sudo yum list docker-ce --showduplicates | sort -r

4、安装新版的docker
- 如果只是安装最新版的docker,那么运行
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

- 如果要安装指定版本,使用完全限定的包名安装特定版本,包名(docker-ce)加上版本字符串(第2列) ,从第一个冒号(:)开始,一直到第一个连字符,用连字符(-)分隔。例如,docker-ce-18.09.1。
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
这个命令安装了 Docker,但是没有启动 Docker。它还创建了一个 docker 组,但是默认情况下它不会将任何用户添加到组中。
5、启动docker
sudo systemctl start docker
6、解决不兼容问题
到这步本来已经结束了,但升级docker 版本之后,原本的容器可能会因为不兼容导致无法启动。会报错:Error response from daemon: Unknown runtime specified docker-runc

这种情况下,先备份原本的容器信息
cp -r /var/lib/docker/containers/ /var/lib/docker/bkcontainers
然后更改/var/lib/docker/containers目录中的文件参数,把docker-runc替换为runc
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
注:grep -rl:递归搜索目录和子目录,只列出含有匹配的文本行的文件名,而不显示具体的匹配内容
xargs:衔接执行之前得到的值
总体意思是把/var/lib/docker/containers中含有‘docker-runc’的文件搜索出来,并把‘docker-runc’字符为runc
接着重新启动docker
systemctl restart docker
再去启动对应的容器,就不会再报错了

7、最后看一下目前的docker 版本,完美
docker version

参考文章:
docker 升级后或者重装后,启动容器提示:Error response from daemon: Unknown runtime specified docker-runc…
install Docker Engine on CentOS
CentOS Docker 安装
本文介绍在CentOS系统中升级Docker的详细步骤。因需安装新容器,要将Docker从1.13.1版升级到20.10.9版。内容涵盖卸载旧版本、安装yum - utils包、查询版本、安装新版、启动Docker,还解决了升级后容器不兼容问题,升级后原容器可正常运行。

1376

被折叠的 条评论
为什么被折叠?



