【问题标题】:Change "hosts" / "-h" Docker for Windows in daemon.json在 daemon.json 中为 Windows 更改“h​​osts”/“-h”Docker
【发布时间】:2017-05-21 22:34:15
【问题描述】:

我正在尝试更改 Docker Desktop for Windows 上的 daemon.json(已安装 Windows 10 Aniversary 最新更新)1.13.0-rc5,因此我可以像这样更改 "hosts": [] 设置:

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

但是,使用设置应用程序更改设置后,我收到此错误:

Docker 守护进程失败并显示消息:无法配置 Docker 带有文件 C:\ProgramData\docker\config\daemon.json 的守护进程: 以下指令被指定为标志和 配置文件:主机:(来自标志: [npipe:////./pipe/docker_engine_windows],来自文件:[tcp://0.0.0.0 http://0.0.0.0])

看起来守护程序已经以 -H 标志启动,并且 json 配置未与其合并。

那么,我们如何通过 json 文件或更改 dockerd 启动参数来更改这些设置?

【问题讨论】:

    标签: docker docker-for-windows docker-desktop


    【解决方案1】:

    你有一个与issue 22339类似的案例:

    这是意料之中的;您不能同时将选项指定为标志和配置文件 (daemon.json)。
    如果您将DOCKER_OPTS 更改为DOCKER_OPTS="" 并重新启动,那么它应该可以工作。我们明确不“合并”这些配置。

    或者在docker.conf中添加

    [Service]
    ExecStart=
    ExecStart=/path/to/dockerd
    # or
    ExecStart=/path/to/dockerd daemon
    

    但官方立场依旧:

    systemd 配置中没有错误,要覆盖 systemd 单元文件中的默认值,您可以使用插入文件,如“Custom Docker daemon options”中所述。

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

    PR 27473 被拒绝,issue 21559

    【讨论】:

    • 感谢您的回复。我也看到了那个公关/问题。但是,我在 Windows 上。如何更改他的默认 dockerd 参数,以便我可以在那里添加 -H 而不是在文件中?
    • 我也在寻找这个 - Docker for Windows 似乎使用 -H 标志启动服务非常烦人。似乎将其作为默认值放入 daemon.json 会起作用?
    • 不仅仅是 Windows 的东西。在 systemd 附带的 ubuntu 16.04 机器上,守护程序使用命令行选项 -H fd:// 启动,这与 daemon.json 中的任何主机设置冲突。如果您随后尝试天真地创建一个 systemd 覆盖文件来更改 ExecStart 指令(即使用 systemctl edit docker),那么 systemctl 会抱怨 Service has more than one ExecStart setting。然后解决方法是,违反直觉,添加一个空的ExecStart=,然后是新设置ExecStart=/usr/bin/dockerd。请参阅:Issue 14491。不好玩。
    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多