最近手残,把服务器重启了,而且是强制重启那种,导致了部署了docker的项目跑不起来了,docker服务也启动不了,然后百度了N久,结果给出的解决基本上都是一样的,但是都不能解决我得问题。
终于找到了一篇认真分析问题的博客(博客地址见文末),可惜没有提到解决方案。
先来说说我得问题是什么:
docker重启错误原因
1.我重启服务器之后,docker就停了,没有重新启动,虽然我设置了开机重启,然并卵。于是我手动重启,提示错误 如下:
unable to create file '/run/user/1001/dconf/user': 打开的文件过多,dconf will not work property.
原因:
目测是因为我之前用另一台服务器远程启动了很多次,没有启动成功,然后又直接到该服务器启动,多账号操作的问题,这个解决方法很简单,删除 /run/user/1001/dconf 下的user 即可。
2.然后重新启动docker,依然没有启动成功,使用命令查看详细的错误提示,如下:
查看命名sudo systemctl status docker.service
错误提示:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since 四 2019-08-15 09:43:22 CST; 21s ago
Docs: https://docs.docker.com
Process: 8012 ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2376 -H tcp://172.17.0.1:2376 (code=exited, status=1/FAILURE)
Main PID: 8012 (code=exited, status=1/FAILURE)
8月 15 09:43:22 a-desktop systemd[1]: Starting Docker Application Container Engine...
8月 15 09:43:22 a-desktop dockerd[8012]: time="2019-08-15T09:43:22.107955080+08:00" level=warning msg="[!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]"
8月 15 09:43:22 a-desktop dockerd[8012]: time="2019-08-15T09:43:22.108102187+08:00" level=warning msg="[!] DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING [!]"
8月 15 09:43:22 a-desktop dockerd[8012]: listen tcp 172.17.0.1:2376: bind: cannot assign requested address
8月 15 09:43:22 a-desktop systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
8月 15 09:43:22 a-desktop systemd[1]: Failed to start Docker Application Container Engine.
8月 15 09:43:22 a-desktop systemd[1]: docker.service: Unit entered failed state.
8月 15 09:43:22 a-desktop systemd[1]: docker.service: Failed with result 'exit-code'.
这个错误就是导致docker 启动失败的真正原因。"DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING"
翻译过来就是:如果你不知道自己在做什么,在没有设置TLS验证的情况下,不要绑定任何IP地址
关于这个TLS验证,我不是很明白,欢迎懂的朋友指导。isten tcp 172.17.0.1:2376: bind: cannot assign requested address
翻译: 绑定了不能分配的地址
问题分析
这个原因就跟docker的ip有关,使用ifconfig 的命令查看就会发现docker0没了。
正常情况在我们安装完docker之后,会默认分配一个docker0的网桥给docker使用,而我强制重启服务器之后可能就导致了这个docker0丢失,重启之后重新绑定了一个不能分配的IP地址。
解决方案
默认的docker0使用的172.17.0.1/21的网段,我们重新建一个仍然使用这个网段,或者你想改成其他的也可以,要注意不要跟宿主机的网段重复。
步骤如下:
1.创建docker0 网桥
sudo brctl addbr docker0
sudo ip addr add 172.17.0.1/21 dev docker0
sudo ip link set dev docker0 up
2.配置docker文件
vim /etc/docker/daemon.json
如果没有daemon.json的话,新建就可以
{
"bip": "172.17.0.1/21"
}
以上内容写入json,保存即可。
最后重启docker即可。
重启命令:
sudo systemctl restart docker
执行完以上操作,docker就可以重启了,可以使用ifconfig
命名查看,就能看到docker0
的网桥了。
以上就是我的踩坑经历,与大家共勉。