27

我已经改变/etc/default/dockerDOCKER_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工作。

真的让我很困惑!

4

9 回答 9

38

根据docker 文档,为 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
    
于 2015-09-04T20:42:43.337 回答
15

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

此链接说明了如何正确修改 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 install 过程似乎忽略了 systemd 单元文件。

于 2015-07-13T13:42:22.433 回答
8

我遇到过同样的问题。

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

于 2015-05-28T11:15:52.810 回答
3

我刚刚遇到了“相同”的问题。

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

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

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

于 2015-01-14T23:54:36.697 回答
1

在检查 docker 源代码(config.goflags.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 $?
    ;;
于 2015-01-05T09:45:05.820 回答
1

回复 systemd 结合 Ubuntu 的评论: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

文件内容:

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --host=tcp://127.0.0.1:2375
于 2016-06-29T17:12:55.200 回答
1

使用平台独立 的守护进程配置文件似乎更干净。

添加"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
于 2019-01-24T17:03:09.173 回答
0

我也有类似的挑战。当我开始考虑将一些系统从 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 daemon 配置,因为 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
于 2018-02-28T03:52:35.843 回答
0

好吧,由于 docker daemon 端口限制,我在 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 守护进程做任何事情 **

于 2019-08-16T11:22:58.820 回答