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

时间:2015-01-04 07:13:48

标签: ubuntu docker upstart systemd

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

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

这让我很困惑!

9 个答案:

答案 0 :(得分:29)

根据docker documentation,为Docker守护程序配置守护程序标志和环境变量的推荐方法是使用 systemd drop-in文件

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

  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
    

答案 1 :(得分:14)

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

此链接说明如何正确修改systemd单元文件以使用DOCKER_OPTS:https://github.com/docker/docker/issues/9889

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

我必须在上述文件中执行以下操作,在系统环境中使用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单元文件。

答案 2 :(得分:7)

我遇到了同样的问题。

Ubuntu 14.10使用systemd代替sysv-init/upstart。也许你应该调查/lib/systemd/system/docker.service来改变选项。

答案 3 :(得分:3)

我刚刚遇到了#34;同样的"问题

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

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

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

答案 4 :(得分:1)

检查泊坞窗源代码(config.goflags.go)后,我会说$DOCKER_OPTS中可以传递的选项是泊坞窗本身的选项,-H--host是docker守护程序的一个选项。 作为解决问题的解决方法,您可以编辑正在使用的init脚本文件,以在其中包含-H选项。例如:

  • 如果您使用的是upstart init系统,请编辑文件/etc/init/docker.conf,使用exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS更改exec行
  • 如果您使用的是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 $?
    ;;

答案 5 :(得分:1)

与Ubuntu一起回复systemd评论:Ubuntu 14.04仍然使用Upstart,因此对/etc/default/docker的更改应该具有所需的效果。直到15.04 Ubuntu默认开始使用systemd。

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

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

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

"hosts"添加到您的/etc/docker/daemon.json中(或者如果您在启动/custom/path/to/daemon/config.json时使用--config-file选项,则将dockerd添加到您的{ ... "hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"], ... } 中:

sudo systemctl restart docker

重新启动守护程序:

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let view = MTGCardViewPicker()
        view.transform = CGAffineTransform(rotationAngle: -rotationAngle)
        ImageDownloader.setMagicCard(with: cards[row].literalImageURL(), imageView: &view.imageView)

        return view
    }

答案 8 :(得分:0)

好吧,由于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守护程序进行任何操作**