起因
由于17.12.0-ce的Docker存在一个严重bug,会导致各种操作显示
1
connection error: desc = "transport: dial unix /var/run/docker/containerd/docker-containerd.sock: connect: connection refused": unknown
而实验室的若干台机器都是装的这个版本,就导致用户和管理员无法进入、重启、停止正在某些运行的container。
这个问题#36002被一万个人遇到过,虽然可以通过一些临时措施解决,但最好的解决方案还是将docker升级到已修复这个bug的最新版本。然而一部分用户的container仍然是正常可用的,因此升级时希望能够尽可能多的保留这些container。
解决方案
此方法不会清除任何container,但对container内运行的程序有影响,建议做好备份。
更新源
如果没有添加过docker的源,需要先加一遍
1
2
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
注意:此处的由于使用的是Ubuntu 16.04,源为xenial,如果其他版本需要做对应的修改。
卸载旧版本docker
1
sudo apt-get purge -y docker.io docker-engine
安装新版本
1
2
sudo apt-get update
sudo apt-get install -y docker-ce
恢复旧版本容器
经过上面的步骤,新版本的docker应该正常运行了,但是所有旧版本的时建立的container都无法访问了。此时需要重启host,之后各用户就可以进入各自的容器了。
此时的容器丢失了许多信息(如挂载目录),这只需要用户在容器内强制重启,初始化容器即可
1
sudo reboot -f
This work is licensed under a
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license.