Docker 默认配置文件不生效

Posted on 2016-2-28 in Docker

最近的工作需要跟 Docker 打交道,并且搭建了一个私有仓库在本地环境存储相应的 Docker 镜像,但是在往私有仓库(非HTTPS)推镜像的时候,出现了 x509: certificate signed by unknown authority 的错误,Google 后得知解决方法是在 Docker 运行的时候添加 --insecure-registry 选项,或者修改 /etc/default/docker 文件增加一个配置项。

我选择 option 2。于是诡异的事情发生了。

我的系统是 Ubuntu 15.04,Docker 版本是 1.10.2(写本文的时候是最新的稳定版)。

按照网上的解决方案,我在 /etc/default/docker 中增加了一行 DOCKER_OPTS="--insecure-registry xxx.sample.com:5000" 配置项,来表明我需要增加一个私有仓库,并且它是不安全的,但是我不care。

然后重启 Docker 服务,重新推镜像,发现还是出现了同样的错误,用 ps aux | grep docker 发现 docker 的 COMMAND 是 /usr/bin/docker daemon -H fd://,也就是说,我的设置并没有生效。。。

又开始一轮 Google,关键字 docker configuration file not work。终于,在 StackOverflow 上找到了一个解释,并且发现早就有人提过相应的 bug 了。

先说原因,在 Ubuntu 15.04 中,systemd 取代了 Upstart 成为了默认的 init system,而基于 systemd 的系统,不再从 /etc/default 中读取配置文件,

那么,如何解决呢?

1.修改 /lib/systemd/system/docker.service

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

2.然后执行

# systemctl daemon-reload
# systemctl restart docker

3.确认 /etc/default/docker 被加载

jonathang@jonathang-pc:~$ ps aux | grep docker
root       772  0.0  0.4 411004 37120 ?        Ssl   2月28   0:14 /usr/bin/docker daemon -H fd:// --insecure-registry xxx.sample.com:5000

搞定!

参考文档: