CentOS7下docker服务无法启动的一般检查

检查步骤

启动docker服务:
systemctl restart docker

这个时候会报错,请进行以下步骤:
1. 找到报错的类型,或者报错的说明。
2. 检查docker的配置文件
3. 检查磁盘空间
4. 检查端口占用情况

步骤详解

检查报错类型,查看日志:

journalctl -xe

检查配置文件,不同操作系统位置基本相同:

/etc/sysconfig/docker/

或者直接找到docker运行程序,一般会有相关配置文件的默认路径

检查磁盘空间:

df -h

检查端口占用:

netstat -anp

实例

报错信息如下:

-- Unit docker.service has begun starting up.
Dec 04 21:17:46 localhost.localdomain docker[7175]: time="2016-12-04T21:17:46.093155159+08:00" level=warning msg="/!\\ DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\"
Dec 04 21:17:46 localhost.localdomain docker[7175]: time="2016-12-04T21:17:46.093322868+08:00" level=fatal msg="listen tcp 172.17.0.1:2376: bind: cannot assign requested address"
Dec 04 21:17:46 localhost.localdomain systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Dec 04 21:17:46 localhost.localdomain systemd[1]: Failed to start Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit docker.service has failed.

解决方案:

上一篇文章已经说过了简单暴力的解决方案,就是清理/var/lib/docker这个目录,重置设置。
然而,并不清楚具体原因。今天服务器有断电了,服务还是报错。说明了一点,简单暴力的手段并不是好的解决方案,治标不治本。这里重新分析了先问题:

可以看到fatal msg”listen tcp 172.17.0.1:2376: bind: cannot assign requested address“,说的是绑定了一个端口,但是这个地址和端口又不能分配。

上一行大意“你要是不懂,就别瞎绑定端口”,囧。。

找了很久没有在/var/lib/docker的目录下找到关于2376端口bind的配置,思量半天,突然感觉是程序启动的配置文件,最后在/etc/sysconfig/docker目录下找到了。额,这个是之前为了实现一个跟jenkins相关的功能绑定的,并不是瞎邦的。暂时注释掉bind设置的这行,重启服务。ok~

————————————-芥系分割线——————————————————-
2016/12/24 平安夜

之前遇到的这个问题又重新考虑了一遍,翻了翻docker remote api的官方文档,半年之间已经迭代了很多版本。

上文问题的提示再单独拎出来,如下:

04T21:17:46.093155159+08:00" level=warning msg="/!\\ DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING /!\\"

翻译:

04T21:17:46.093155159+08:00" level=warning msg="/!\\ 你要知道绑定IP地址前请先设置-tlsverify  /!\\"

具体什么是tlsverify呢?字面意思就是TLS(Transport Layer Security)认证。通过证书授使只受信任的docker客户端连接到服务器。类似git里的ssl授权客户端一样。

不设置tlsverify的话,默认的docker damen的无法开机启动的。对于运维来说就是一场噩梦。

你可能感兴趣的:(docker)