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