参考文章:https://blog.csdn.net/weixin_46152207/article/details/127533584
本文记录在CentOS上使用yum工具升级docker 的过程。参考文章写得很好,一次性成功。
我为什么升级
老版本是是1.13.X不支持多阶段构建,多阶段构建需要1.17.5以上版本
旧版本备份
首先对原来的配置文件进行备份,docker升级可能覆盖原配置文件。镜像和容器不会覆盖,升级后依然可用。
默认配置文件
默认路径:/etc/docker/*
我只备份daemon.json,升级后确实被覆盖,我从备份恢复了daemon.json存储地址
默认路径:/var/lib/docker
升级不会覆盖该路径,升级后可以继续使用
我遇到的问题
- containerd.io 安装失败
参考上面文章基本可用,但是 containerd.io 下载失败,在国内镜像中无法下载
containerd.io-1.6.33-3.1.el7.x86_64.rpm: [errno -1] 软件包与预期下载的不符
通过直接下载,手动安装解决
# 下载,如果有网络问题,可以从其他地方下载上传
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.6.33-3.1.el7.x86_64.rpm
# 安装
rpm -ivh --replacepkgs containerd.io-1.6.33-3.1.el7.x86_64.rpm
- 低版本升级到高版本之后不兼容 修改参数进行解决,
修改后需要重启
Error response from daemon: Unknown runtime specified docker-runc
解决方法:
更改/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