之前一直使用Ubuntu 14.04
来跑Docker。今天在16.04 LTS上跑Docker的时候发现设置DOCKER_OPTS
的时候有些区别,特此记录一下。
1. 症状
之前在Ubuntu 14.04 LTS
上都是通过修改/etc/default/docker
文件来设置DOCKER_OPTS
参数的,譬如像下面这个配置:
1# Docker Upstart and SysVinit configuration file
2DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2345"
是通过使用-H tcp://0.0.0.0:2345
参数,开启Docker的Remote API端口。这样就可以通过远程访问Docker服务。
今天在16.04 LTS
版本上发现这样修改不起作用。具体表现是始终没有绑定到端口2345上,这个参数根本就没有起作用。
2. 原因
这个问题出现的原因是/etc/default/docker
这个文件是用于SysVinit
启动机制的一个配置文件。而Ubuntu 16.04 LTS
使用systemd
替代了init
作为服务启动进程。新的启动机制不使用这个配置文件。
3. 解决办法
解决办法就是修改systemd
的启动脚本,引入这个配置文件。打开/lib/systemd/system/docker.service
这个文件,修改如下:
1EnvironmentFile=-/etc/default/docker
2ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://
上述修改通过EnvironmentFile
指定了环境变量文件(内容参考上面)。然后在ExecStart
中使用了在环境变量文件中定义的DOCKER_OPTS
环境变量。这样修改以后,就可以通过修改/etc/default/docker
文件来修改DOCKER_OPTS
变量了。
修改上述文件之后,使用下面的命令使配置生效:
1sudo systemctl daemon-reload
2sudo service docker restart