docker无法启动.md

0x01.问题描述:

开机无法自启动docker,手动启动docker,报错提示启动过程出错.
因为docker未能启动,运行docker指令,如docker ps,报错:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

系统环境:

Server Version: 17.06.0-ce
Kernel Version: 4.8.0-58-generic
Operating System: Ubuntu 16.04.2 LTS
OSType: linux
Architecture: x86_64

0x02.问题定位:

经过查找资料,尝试和分析,发现每次开机后,网络的桥接接口(docker默认设置了docker0桥接)都会丢失.
执行ifconfig,并没有桥接接口

0x03.问题解决:

3.1.方案1: 使用brctl新建桥接接口

$ sudo brctl addbr docker0
$ sudo ip addr add 192.168.5.1/24 dev docker0
$ sudo ip link set dev docker0 up

执行ifconfig,确认docker0设置成功.
执行sudo systemctl start docker.service 启动docker(这一步耗时会比较长,可能要几分钟)

经过以上设置,docker应该能成功运行了.
但是并不是完美解决,每次开机后docker0接口都会丢失,每次要用docker,还得重新设置下

3.2.方案2: 在network/interfaces中直接声明桥接接口

以管理员权限编辑文件/etc/network/interfaces,加入以下声明

auto br0
iface br0 inet static
        address 10.18.44.26
        netmask 255.255.255.192
        broadcast 10.18.44.63
        dns-nameservers 10.0.80.11 10.0.80.12
        # set static route for LAN 
        post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.18.44.1
        post-up route add -net 161.26.0.0 netmask 255.255.0.0 gw 10.18.44.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

保存后,重启网络接口sudo systemctl restart networking
执行ifconfig,确认br0设置成功.

以管理员权限编辑文件/etc/docker/daemon.json(如不存在则新建),加入以下声明

{
    "bridge": "br0"
}

此声明告诉docker将使用br0代替docker0作为默认桥接.
当然,如果在interfaces中不适用br0,而直接使用docker0作为桥接名称,也就不需要编辑daemon.json
现在重启后,docker应该是可以正常启动了.

参考资料:

https://docs.docker.com/engine/userguide/networking/default_network/build-bridges/
https://www.cyberciti.biz/faq/how-to-create-bridge-interface-ubuntu-linux/

其他标题
docker无法开机启动


原创文章,转载请注明: 转载自张哲的博客

本文链接地址: docker无法启动.md