Ubuntu DOCKER_选项在配置文件/etc/default/DOCKER中不起作用

Ubuntu DOCKER_选项在配置文件/etc/default/DOCKER中不起作用,ubuntu,docker,upstart,systemd,Ubuntu,Docker,Upstart,Systemd,我用docker\u OPTS=“-H”更改了/etc/default/dockertcp://127.0.0.1:2375 -Hunix:///var/run/docker.sock“(Ubuntu14.04中的docker版本1.4.1),但它对我没有任何影响(在端口2375上没有监听)。docker似乎没有读取这个初始配置文件,因为我发现export http\u proxyenvironment也不起作用 仅sudo docker-Htcp://127.0.0.1:2375 -Hunix

我用
docker\u OPTS=“-H”更改了
/etc/default/docker
tcp://127.0.0.1:2375 -Hunix:///var/run/docker.sock“
(Ubuntu14.04中的docker版本1.4.1),但它对我没有任何影响(在端口
2375上没有监听)。docker似乎没有读取这个初始配置文件,因为我发现
export http\u proxy
environment也不起作用

sudo docker-Htcp://127.0.0.1:2375 -Hunix:///var/run/docker.sock -d
有效


这真把我弄糊涂了

在检查了docker源代码(和)之后,我想说您可以传入的选项
$docker\u OPTS
是docker本身的选项,
-H
--host
是docker守护进程的选项。 作为解决问题的一种变通方法,您可以编辑正在使用的init脚本文件,以便在其中包含
-H
选项。例如:

  • 如果您使用的是upstart init system,请编辑文件
    /etc/init/docker.conf
    使用
    exec“$docker”-H更改exec行tcp://127.0.0.1:2375“-H”unix:///var/run/docker.sock“-d$DOCKER_选项
  • 如果您使用的是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 $?
    ;;
我刚刚遇到了同样的问题

我注意到/etc/default/docker中的所有选项在默认情况下都被注释掉了

我移除了DOCKER_选项前面的#,重新启动,它按预期工作

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

我也有同样的问题


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

有关使用systemd的Debian/Ubuntu的更高版本,请参见此处

此链接说明如何正确修改systemd unit文件以使用DOCKER_选项:

实际上,您创建了一个/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守护程序配置守护程序标志和环境变量的建议方法是使用systemd下拉文件

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

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

  • 添加或修改以下行,替换您自己的值

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

  • 重新加载
    systemctl
    配置

     $ sudo systemctl daemon-reload
    
  • 重新启动Docker:

     $ sudo systemctl restart docker.service
    
  • 通过查看
    netstat
    的输出,确认
    dockerd
    正在监听配置的端口,检查更改是否有效

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

  • 作为对systemd评论与Ubuntu结合的回应:Ubuntu 14.04仍然使用Upstart,因此对
    /etc/default/docker
    的更改应该达到预期效果。直到15.04 Ubuntu才开始默认使用systemd

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

  • 创建文件
    /etc/systemd/system/docker.service.d/docker tcp.conf
  • 添加以下内容
  • 执行sudo systemctl后台程序重新加载
  • 执行sudo systemctl restart docker
  • 文件内容:

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

    我也遇到过类似的挑战。当我开始考虑将一些系统从Ubuntu 14.04迁移到Ubuntu 16.04时。我的目标是为ubuntu16.04(systemd)和ubuntu14.04(Upstart)使用一个带有dockerd标志(DOCKER_OPTS)的dockerd配置文件,而不是/etc/DOCKER/daemon.json。我选择不对docker守护程序配置使用/etc/docker/daemon.json,因为json不支持注释

    我希望systemd设计使用覆盖文件,该文件只修改dockerd标志。它将默认Docker systemd配置文件(/lib/systemd/system/Docker.service)用于其他Docker设置。另一个目标是在每次更改或引导后在每个系统上定制systemd

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

    使用平台独立似乎更干净

    “hosts”
    添加到
    /etc/docker/daemon.json
    (或者
    /custom/path/to/daemon/config.json
    如果在启动
    dockerd
    时使用
    --config file
    选项):

    重新启动守护程序:

    sudo systemctl restart docker
    

    由于docker daemon端口限制,我在从jenkins按需旋转奴隶时遇到了很多问题

    所以我做了

    sudo systemctl编辑docker.service

    在下面一节中添加 保存文件 在命令下面运行
    **注意:这将公开您的守护程序,任何拥有您的ip和端口的人都可以使用您的docker守护程序做任何事情**

    只是为了更清楚,您是否在编辑
    /etc/default/docker
    后重新启动docker服务?是的,我再次重新启动它,是否应该
    /etc/default/docker
    是docker守护程序启动配置文件?许多文章(包括)告诉我在
    /etc/default/DOCKER
    中设置
    DOCKER\u选项,而不是在bash环境中。是的,应该这样做。和dockerinit脚本load/etc/default/docker。我已经测试过,如果我设置
    D,那么在我的环境中(LinuxMint17-Ubuntu14.04-和Docker1.4.1)可以工作
    
    {
    ...
    "hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"],
    ...
    }
    
    sudo systemctl restart docker
    
    [Service]
    ExecStart=
    ExecStart=/usr/bin/docker daemon --host=tcp://0.0.0.0:2375
    
    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker.service