问题描述
我用DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock"
(ubuntu 14.04中的docker版本1.4.1)更改了/etc/default/docker
,但它对我没有任何影响(不在端口2375
上监听)。似乎docker不读取这个初始配置文件,因为我发现export http_proxy
环境也不起作用。
只有sudo docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d
有效。
这让我很困惑!
最佳解决方法
根据docker documentation,为Docker守护程序配置守护程序标志和环境变量的推荐方法是使用systemd drop-in文件。
因此,对于这种特定情况,请执行以下操作:
-
使用命令
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的Debian /Ubuntu的更高版本,请参见此处。
此链接说明如何正确修改系统单元文件以使用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单元文件。
第三种解决方法
我遇到过同样的问题。
Ubuntu 14.10使用systemd
代替sysv-init/upstart
。也许您应该查看/lib/systemd/system/docker.service
来更改选项。
第四种方法
我刚刚遇到”same”问题。
我注意到/etc /default /docker中的所有选项实际上都是默认注释掉的。
我删除了DOCKER_OPTS前面的#,重新启动并按预期工作。
我认为以前的docker版本(1.3)默认没有注释掉这些选项,至少我不记得必须删除#-sign。