Docker从入门到精通——daemon.json解决和启动脚本之间的冲突
daemon.json
解决和启动脚本之间的冲突
一、daemon.json解决和启动脚本之间的冲突
如果您使用 daemon.json
文件,也手动或使用启动脚本将选项传递给 dockerd 命令,并且这些选项发生冲突,则 Docker 无法启动并出现以下错误:
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: [unix:///var/run/docker.sock], from file: [tcp://127.0.0.1:2376])
如果您看到与此类似的错误并且您正在使用标志手动启动守护程序,您可能需要调整您的 flags 或 daemon.json
以消除冲突。
注意:如果您看到此特定错误,请继续 下一部分以获取解决方法。
如果您使用操作系统的初始化脚本启动 Docker,您可能需要以特定于操作系统的方式覆盖这些脚本中的默认值。
二、将 daemon.json 中的 hosts 键与 systemd 一起使用
难以解决的配置冲突的一个显着示例是当您想要指定与默认值不同的守护程序地址时。Docker 默认监听一个套接字。在 Debian 和 Ubuntu 系统上使用systemd
,这意味着 -H
在启动时总是使用主机标志 dockerd
。如果您在 中指定 hosts
条目daemon.json
,则会导致配置冲突(如上述消息中所示)并且 Docker 无法启动。
要解决此问题,请创建一个 /etc/systemd/system/docker.service.d/docker.conf
包含以下内容的新文件,以删除 -H
默认启动守护程序时使用的参数。
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
有时您可能需要 systemd
使用 Docker 进行配置,例如 配置 HTTP 或 HTTPS 代理。
注意:如果您覆盖此选项,然后在手动启动 Docker 时未指定
hosts
条目daemon.json
或-H
标志,则 Docker 无法启动。
sudo systemctl daemon-reload
在尝试启动 Docker 之前运行。如果 Docker 成功启动,它现在正在侦听 hosts
key 中 指定的 IP 地址,daemon.json
而不是套接字。
重要提示:Docker Desktop for Windows 或 Docker Desktop for Mac 不支持设置
hosts
。daemon.json