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

Gas*_*Gas 6 service configuration docker ubuntu-16.04

我正在尝试使用配置文件/etc/docker/daemon.json在ubuntu 16.04中配置docker(版本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"]
}
Run Code Online (Sandbox Code Playgroud)

当我尝试重新启动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.
Run Code Online (Sandbox Code Playgroud)

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])
Run Code Online (Sandbox Code Playgroud)

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

And*_*inn 9

看起来这是从命令行和配置文件合并配置的问题。正在指定默认的 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
Run Code Online (Sandbox Code Playgroud)


BMi*_*tch 9

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

创建此文件后,运行systemctl daemon-reload; systemctl restart docker.