我在启动 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'.
Run Code Online (Sandbox Code Playgroud)
相关行是:
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
Run Code Online (Sandbox Code Playgroud)
您的错误文本已被剪切,因此我无法检查它是否完全相同,但我收到了此错误:
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
Run Code Online (Sandbox Code Playgroud)
这与有多个网卡的机器有关(也可能发生在有 VPN 的机器上,您也可以暂时停止它,启动 docker 并重新启动 vpn 或应用以下解决方法)
对我来说,解决方案是像这样手动启动 docker:
/usr/bin/docker daemon --debug --bip=192.168.y.x/24
Run Code Online (Sandbox Code Playgroud)
其中 192.168.yx 是主机器 IP 和 /24 是 IP 网络掩码。Docker 将使用此网络范围来构建桥接和防火墙规则。--debug 并不是真正需要的,但如果其他事情失败可能会有所帮助
启动一次后,就可以杀掉docker,照常启动了。AFAIK,docker 已经为那个 --bip 创建了一个缓存配置,现在应该可以在没有它的情况下工作。当然,如果您清理了 docker 缓存,您可能需要再次执行此操作。
小智 9
这对我有用,来自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 &
Run Code Online (Sandbox Code Playgroud)
结果我需要为 Docker 尝试使用的网络(即bridge网络)启用 IP 转发。
/etc/systemd/network/bridge.network这是通过创建包含内容的文件来完成的
[Network]
IPFoward=kernel
Run Code Online (Sandbox Code Playgroud)
然后使用 重新启动systemd-networkd守护进程# systemctl restart systemd-networkd.service。此后,# systemctl start docker.service工作顺利。
PS 重新启动网络守护程序后,我与网络断开连接(正如人们所预料的那样),并且必须手动连接。如果您有重要的事情发生,可能值得考虑。
| 归档时间: |
|
| 查看次数: |
16170 次 |
| 最近记录: |