Docker 守护程序无法初始化网络控制器



启动docker守护进程有问题。我已经安装了docker,但当我试图运行# systemctl start docker.service时,它会抛出一个错误。$ systemctl status docker.service给了我这个:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2016-09-21 14:38:24 CEST; 6s ago
     Docs: https://docs.docker.com
  Process: 5592 ExecStart=/usr/bin/dockerd -H fd:// (code=exited, status=1/FAILURE)
 Main PID: 5592 (code=exited, status=1/FAILURE)
Sep 21 14:38:24 tp-x230 dockerd[5592]: time="2016-09-21T14:38:24.271068176+02:00" level=warning msg="devmapper: Base device already exists and has filesystem xfs on it. User specified filesystem  will be ignored."
Sep 21 14:38:24 tp-x230 dockerd[5592]: time="2016-09-21T14:38:24.327814644+02:00" level=info msg="[graphdriver] using prior storage driver "devicemapper""
Sep 21 14:38:24 tp-x230 dockerd[5592]: time="2016-09-21T14:38:24.329895994+02:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
Sep 21 14:38:24 tp-x230 dockerd[5592]: time="2016-09-21T14:38:24.330707721+02:00" level=info msg="Loading containers: start."
Sep 21 14:38:24 tp-x230 dockerd[5592]: time="2016-09-21T14:38:24.335610867+02:00" level=info msg="Firewalld running: false"
Sep 21 14:38:24 tp-x230 dockerd[5592]: time="2016-09-21T14:38:24.461243263+02:00" level=fatal msg="Error starting daemon: Error initializing network controller: Error creating default "bridge" network: failed to parse pool request for ad
Sep 21 14:38:24 tp-x230 systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE
Sep 21 14:38:24 tp-x230 systemd[1]: Failed to start Docker Application Container Engine.
Sep 21 14:38:24 tp-x230 systemd[1]: docker.service: Unit entered failed state.
Sep 21 14:38:24 tp-x230 systemd[1]: docker.service: Failed with result 'exit-code'.

,相关行为:

Sep 21 14:38:24 tp-x230 dockerd[5592]: time="2016-09-21T14:38:24.461243263+02:00" level=fatal msg="Error starting daemon: Error initializing network controller: Error creating default "bridge" network: failed to parse pool request for ad

你的错误文本被剪切,所以我不能检查它是否完全相同的错误,但我得到了这个错误:

Error starting daemon: Error initializing network controller: Error creating default "bridge" network: failed to parse pool request for address space "LocalDefault" pool "" subpool "": could not find an available predefined network

这与有几个网卡的机器有关(也可能发生在有VPN的机器上,你也可以暂时停止它,启动docker并重新启动VPN或应用以下解决方案)

对我来说,解决方案是像这样手动启动docker:

/usr/bin/docker daemon --debug --bip=192.168.y.x/24

,其中192.168.y。x是主机的IP地址,/24是主机的子网掩码。Docker将使用这个网络范围来构建网桥和防火墙文件。——debug并不是真正需要的,但在其他操作失败时可能会有所帮助

启动一次后,您可以杀死docker并照常启动。我敢说,docker已经为它创建了一个缓存配置,现在没有它应该可以工作了。当然,如果你清理了docker缓存,你可能需要再做一次。

这为我工作,从https://github.com/microsoft/WSL/issues/6655

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo dockerd &

显然在删除/var/lib/docker/network/files/local-kv.db在某些情况下可能有效。

来源:https://github.com/moby/moby/issues/18113 issuecomment - 161058473

另一种解释可能是使用VPN引起的问题:https://github.com/moby/moby/issues/31546#issuecomment-284196714

原来我需要为Docker试图使用的网络启用IP转发,即bridge网络。

这是通过创建包含 内容的文件/etc/systemd/network/bridge.network来完成的
[Network]
IPFoward=kernel

,然后用# systemctl restart systemd-networkd.service重新启动systemd-networkd守护进程。在此之后,# systemctl start docker.service工作正常。

注:在重新启动网络守护进程之后,我与网络断开了连接(正如人们所预料的那样),必须手动连接。如果你有重要的事情要做,可能值得考虑一下。

在我的例子中,发生错误是因为我正在运行wsl版本1而不是2

要将wsdl更新到版本2,请运行wsl --set-version <distro name> 2替换为要更新的Linux发行版的名称。

例如,wsl --set-version Ubuntu-18.04 2将设置你的Ubuntu 18.04发行版使用WSL 2

最新更新