在daemon.json中更改Docker for Windows的“hosts” / “-h”

8

我正在尝试更改Windows版Docker桌面(已安装Windows 10最新更新版本)1.13.0-rc5上的daemon.json,以便我可以像这样更改"hosts": []设置:

{
  "hosts": [
    "tcp://0.0.0.0",
    "http://0.0.0.0"
  ]
}

然而,在使用设置应用程序更改设置后,我收到了以下错误消息:

Docker守护程序出错:无法使用文件C:\ProgramData\docker\config\daemon.json配置Docker守护程序:以下指令既作为标志又在配置文件中指定:hosts:(来自标志:[npipe:////./pipe/docker_engine_windows],来自文件:[tcp://0.0.0.0 http://0.0.0.0]

看起来守护进程已经使用-H标志启动,而json配置没有与之合并。
那么,我们如何通过json文件或更改dockerd启动参数来更改这些设置呢?
1个回答

2
您有一个类似的情况,与问题22339相似:

这是预期的;您不能同时将选项作为标志和在配置文件(daemon.json)中指定。
如果您将DOCKER_OPTS更改为DOCKER_OPTS =“”并重新启动,则应该可以正常工作。我们明确不会“合并”这些配置。

或者在docker.conf中添加。
[Service]
ExecStart=
ExecStart=/path/to/dockerd
# or
ExecStart=/path/to/dockerd daemon

但官方立场仍然是:

systemd 配置中没有 bug,要覆盖 systemd 单元文件中的默认值,可以使用 drop-in 文件,如 "Custom Docker daemon options" 中所述。

如果在 daemon.json 中同时提供了标志和选项,则会产生错误。这是在实现时做出的设计决策(通常情况下,标志应始终优先于配置文件)。自动合并选项不是一个选项,因为这会导致意外结果(意图是覆盖选项还是添加到选项?)

PR 27473 被拒绝,原因是 issue 21559


谢谢回复。我也看到了那个 Pull Request / 问题。但是,我在使用 Windows。该如何更改默认的 dockerd 参数,以便我可以在那里添加 -H 而不是在文件中添加呢? - Gutemberg Ribeiro
1
我也在寻找这个 - Docker for Windows 似乎使用 -H 标志启动服务,这相当令人烦恼。将其作为默认值放入 daemon.json 中是否可行? - Josh Wittner
不仅仅是Windows的问题。在Ubuntu 16.04上,它自带systemd,使用命令行选项-H fd://启动守护进程,这与daemon.json中的任何主机设置冲突。如果您尝试天真地创建一个systemd覆盖文件来更改ExecStart指令(例如使用systemctl edit docker),那么systemctl会抱怨“服务具有多个ExecStart设置”。因此,解决方法是相反的,添加一个空的ExecStart=,然后是新的设置ExecStart=/usr/bin/dockerd。请参见:Issue 14491。不好玩。 - init_js

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接