docker在systemd下的配置问题

问题说明

最近在debian8上装了个docker,但是因为存储空间的问题,需要把docker的存放路径改一下。按照官方文档的说法,只要修改/etc/default/docker里的DOCKER_OPTS,加上-g参数即可:

DOCKER_OPTS="-g /path/to/dockerdata"

但是这样改过以后重启docker,发现docker仍然在使用默认的/var/lib/docker,用ps看了一下,-g参数并没有被传递给dockerd。

去看了/etc/init.d/docker,也没看出什么不对来,只是觉得ps里看到的命令与这里不太一样。

百思不得其解。

放狗一搜才知道,原来是systemd搞的鬼。

systemd

这也不是新东西了,很多前卫的发行版早就已经用它把init替换掉了,然而我是不太喜欢,倒不是因为传说中它的太复杂或是二进制日志之类的,而是单纯因为懒,毕竟init比较熟简单也熟悉一些。

现在终于debian也用上了,只是我还没有注意到,直到这次碰到问题。

docker当然也不是不支持systemd,只是它的支持是有BUG的。那就是它的systemd配置文件里忘记去读取并使用/etc/default/docker里的自定义配置了……

所以,参照这个issue可以得到解决:

解决方案

在 /etc/systemd/system/multi-user.target.wants 目录(不同的发行版可能不一样,这个是debian8的)中找到 docker.service ,在其中找到:

ExecStart=/usr/bin/dockerd -H fd://

这句,修改为:

ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
EnvironmentFile=-/etc/default/docker

然后重启:

systemctl daemon-reload
service docker restart

现在 DOCKER_OPTS 就成功生效了。

推送到[go4pro.org]