服务器重启之后,docker启动不了,提示 "bind: cannot assign requested address"

最近手残,把服务器重启了,而且是强制重启那种,导致了部署了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的网桥了。

以上就是我的踩坑经历,与大家共勉。

docker网桥相关详细的内容可以参考这个博客:https://blog.csdn.net/wangdaoge/article/details/52703890
docker网桥相关详细的内容可以参考这个博客:https://blog.csdn.net/wangdaoge/article/details/52703890
docker启动问题分析参考博客:https://blog.csdn.net/counsellor/article/details/53456663
daemon.json其他配置参考博客:https://blog.csdn.net/u013948858/article/details/79974796

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值