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

我已经改变了/etc/default/docker DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock" (在Ubuntu 14.04中的DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock"版本1.4.1),但对我没有任何影响(不在2375港口收听)。 看起来,docker不读这个初始configuration文件,因为我发现export http_proxy环境不工作了。

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

真让我困惑!

推荐方式码头17.xx +

有很多方法可以为Docker守护进程配置守护进程标志和环境变量。 推荐的方法是使用独立于平台的daemon.json文件,该文件位于Linux上的/etc/docker/

因此,要配置守护进程套接字连接,请执行以下操作:

  1. daemon.json文件中设置以下标志:

     { "hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"] } 
  2. 重新启动Docker

      $ sudo systemctl restart docker 

每次更轻松!


以前在Docker 1.x上

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

所以,对于这个特定的情况,请执行以下操作:

  1. 使用以下内容创建一个名为/etc/systemd/system/docker.service.d/custom.conf的文件:

     [Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock 
  2. 冲洗更改:

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

      $ sudo systemctl restart docker 

不推荐的方法

编辑文件/lib/systemd/system/docker.service

 ... [Service] ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS ... EnvironmentFile=-/etc/default/docker ... 

然后执行:

 $ systemctl daemon-reload $ systemctl restart docker 

在这里查看使用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安装过程似乎忽略了systemd单元文件。

我遇到过同样的问题。

Ubuntu 14.10使用systemd而不是sysv-init/upstart 。 也许你应该看看/lib/systemd/system/docker.service来改变选项。

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

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

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

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

在检查docker源代码( config.go和flags.go )之后,我会说你可以在$DOCKER_OPTS中传递的选项是$DOCKER_OPTS本身的选项, -H或者--host$DOCKER_OPTS守护进程的一个选项。 作为解决您的问题的解决方法,您可以编辑您正在使用的包含-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行exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS
  • 如果你正在使用sysvinit初始化系统,编辑/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 $? ;;

在回复与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