DOCKER_OPTS 在配置文件中不起作用 /etc/default/docker

DOCKER_OPTS do not work in config file /etc/default/docker

我已经将/etc/default/docker更改为DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock"(docker版本1.4.1 in ubuntu 14.04),但它对我没有任何影响(不听在端口 2375)。 docker 似乎没有读取这个初始配置文件,因为我发现 export http_proxy 环境也不起作用。

只有 sudo docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d 有效。

真是把我搞糊涂了!

查看docker源代码(config.go and flags.go)后,我会说你可以在$DOCKER_OPTS中传递的选项是docker本身的选项,而-H--host 是 docker 守护进程的一个选项。 作为解决问题的解决方法,您可以编辑您正在使用的初始化脚本文件以在其中包含 -H 选项。例如:

  • 如果您使用的是 upstart init 系统,请编辑文件 /etc/init/docker.conf 将 exec 行更改为 exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS
  • 如果您使用的是 sysvinit init 系统,请编辑文件 /etc/init.d/docker,将起始行更改为:

使用这个命令:

start-stop-daemon --start --background \
    --no-close \
    --exec "$DOCKER" \
    --pidfile "$DOCKER_SSD_PIDFILE" \
    --make-pidfile \
    -- \
        -H "tcp://127.0.0.1:2375" \
        -H "unix:///var/run/docker.sock" \
        -d -p "$DOCKER_PIDFILE" \
        $DOCKER_OPTS >> \
        "$DOCKER_LOGFILE" 2>&1 
    log_end_msg $?
    ;;

我刚刚 运行 遇到 "same" 问题。

我注意到 /etc/default/docker 中的所有选项实际上默认都被注释掉了。

我删除了 DOCKER_OPTS 前面的 #,重新启动并按预期工作。

我认为以前的 docker 版本 (1.3) 没有默认注释掉这些选项,至少我不记得必须删除 #-sign。

我遇到了同样的问题。

Ubuntu 14.10 使用 systemd 而不是 sysv-init/upstart。也许您应该查看 /lib/systemd/system/docker.service 以更改选项。

请参阅此处了解使用 systemd 的 Debian/Ubuntu 更高版本。

此 link 解释了如何正确修改 systemd 单元文件以使用 DOCKER_OPTS:https://github.com/docker/docker/issues/9889

基本上你创建一个 /etc/systemd/system/docker.service.d/docker.conf 文件并在那里指定你的覆盖。

我必须在上述文件中执行类似以下操作才能在 systemd 环境中使用 DOCKER_OPTS 环境变量启动 docker:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker -d $DOCKER_OPTS -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

当前 docker 安装过程似乎忽略了 systemd 单元文件。

根据 docker documentation,为您的 Docker 守护进程配置守护进程标志和环境变量的推荐方法是使用 systemd 插入文件

因此,对于这种特定情况,请执行以下操作:

  1. 使用命令 sudo systemctl edit docker.service 在文本编辑器中打开 docker.service 的覆盖文件。

  2. 添加或修改以下行,替换为您自己的值。

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock
    
  3. 保存文件。

  4. 重新加载 systemctl 配置。

     $ sudo systemctl daemon-reload
    
  5. 重启Docker:

     $ sudo systemctl restart docker.service
    
  6. 通过查看 netstat 的输出以确认 dockerd 正在侦听配置的端口来检查更改是否得到遵守。

    $ sudo netstat -lntp | grep dockerd
    tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
    

结合Ubuntu回复systemd评论:Ubuntu14.04仍然使用Upstart,所以对/etc/default/docker的修改应该达到了预期的效果。直到 15.04 Ubuntu 才开始默认使用 systemd。

如果您有 Ubuntu 15.04 或更高版本因此需要使用 systemd,或者如果您明确选择在 15.04 之前使用 systemd,这是获得所需 OP 效果的正确且最简单的方法,a TCP 套接字,将是:

  1. 创建文件/etc/systemd/system/docker.service.d/docker-tcp.conf
  2. 添加以下内容
  3. 执行sudo systemctl daemon-reload
  4. 执行sudo systemctl restart docker

文件内容:

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --host=tcp://127.0.0.1:2375

我遇到了类似的挑战。当我开始寻找开始将某些系统从 Ubuntu 14.04 移动到 Ubuntu 16.04 时。我的目标是为 Ubuntu 16.04 (systemd) 和 Ubuntu 14.04 (Upstart) 使用一个带有 dockerd 标志 (DOCKER_OPTS) 的 dockerd 配置文件除了 /etc/docker/daemon.json。我选择不使用 /etc/docker/daemon.json 作为 docker 守护进程配置,因为 json 不支持注释。

我希望 systemd 设计使用覆盖文件,它只修改 dockerd 标志。它使用默认的 Docker systemd 配置文件 (/lib/systemd/system/docker.service) 进行其他 Docker 设置。另一个 objective 是在每次更改或启动后在每个系统上自定义 systemd。

它解决了我的挑战。可能对你有帮助。

https://github.com/BradleyA/docker-scripts/tree/master/dockerd-configuration-options

git clone https://github.com/BradleyA/docker-scripts
cd docker-scripts/dockerd-configuration-options

使用 平台独立 daemon-configuration-file 似乎更干净。

"hosts" 添加到您的 /etc/docker/daemon.json(如果您在启动 dockerd 时使用 --config-file 选项,则添加 /custom/path/to/daemon/config.json):

{
...
"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"],
...
}

重启守护进程:

sudo systemctl restart docker

好吧,由于 docker 守护程序端口限制,我在从 jenkins 旋转按需从站时遇到了很多问题。

我也是

sudo systemctl edit docker.service

添加到下面的部分

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --host=tcp://0.0.0.0:2375

保存文件

运行 命令下方

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service

**注意:这将公开您的守护进程,任何拥有您的 IP 和端口的人都可以对您的 docker 守护进程做任何事情 **