在daemon.json中configuration主机后无法启动docker

我正在尝试在ubuntu 16.04中使用configuration文件/etc/docker/daemon.json来configurationdocker (版本17.03.1-ce)来添加主机:

{ "debug": true, "hosts": ["tcp://0.0.0.0:1234", "unix:///var/run/docker.sock"], "dns" : ["8.8.8.8","8.8.4.4"] } 

当我尝试重新启动docker..它失败

 #service docker restart Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 

注意systemctl status docker.service

 Starting Docker Application Container Engine... docker-slave-ubuntu-build dockerd[24806]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [fd://], from file: [tcp://0.0.0.0:4243 unix:///var/run/docker.sock]) 

在哪里我可以删除提到的国旗? 我必须修改维护者的脚本?

对于systemd,我首选的方法是部署一个简单的覆盖文件(您可能需要先创build目录):

 $ cat /etc/systemd/system/docker.service.d/override.conf # Disable flags to dockerd, all settings are done in /etc/docker/daemon.json [Service] ExecStart= ExecStart=/usr/bin/dockerd 

这将从dockerd中删除-H ...默认标志以及任何其他选项,并允许您从daemon.json文件pipe理docker。 这也允许docker对其启动脚本进行更改,只要他们不修改ExecStart,并且您将继续接收这些更改,而无需维护您自己的docker.service副本。

在创build这个文件之后,运行systemctl daemon-reload; systemctl restart docker systemctl daemon-reload; systemctl restart docker

看起来这是从命令行和configuration文件合并configuration的问题。 默认的systemd单元文件是指定-H fd:// ,它与你的tcp://0.0.0.0:1234unix:///var/run/docker.sock

关于这个问题有一些GitHub的问题:

他们似乎没有考虑到这个错误。 但这绝对是一个烦恼。 解决方法是复制默认单元文件并从中删除-H fd://

 $ sudo cp /lib/systemd/system/docker.service /etc/systemd/system/ $ sudo sed -i 's/\ -H\ fd:\/\///g' /etc/systemd/system/docker.service $ sudo systemctl daemon-reload $ sudo service docker restart