Docker(systemd)忽略默认目录(docker.service)的更改

我想在服务器上部署Docker,但是我希望所有与Docker相关的数据位于基本系统的独立分区中。 我已经在“/ srv”上安装了这个分区,并根据官方文档做了如下修改:

这是我的'/usr/lib/systemd/system/docker.service'文件:

[Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.com After=network.target docker.socket Requires=docker.socket [Service] Type=notify EnvironmentFile=-/srv/docker/docker.conf ExecStart=/usr/bin/docker -d -H fd:// $OPTIONS LimitNOFILE=1048576 LimitNPROC=1048576 [Install] Also=docker.socket WantedBy=multi-user.target 

这是'docker.service'文件中引用的'/srv/docker/docker.conf'文件:

 $OPTIONS="--graph /srv/docker --storage btrfs" 

docker守护程序启动正确,也拉图像。 问题是它仍然不在'/ srv / docker'目录中存储任何内容。

另外,当我运行'ps -aux | grepdocker',我得到的是这样的:

 root 661 0.4 0.2 351080 17044 ? Ssl 19:33 0:00 /usr/bin/docker -d -H fd:// 

命令行在“fd://”处停止。 在我看来,'$ OPTIONS'由于某种原因而被忽略了。

现在,我引用文件的方式有问题吗? 这里还有别的事情吗? 我正在做所有这些configuration更改的原因是我真的想保留所有docker相关的数据在'/ srv / docker /'目录下。

有任何想法吗?

更新1:

我改变了我的'docker.conf'文件,正如答案部分所build议的那样。 现在:

 $OPTIONS="--graph /srv/docker --storage btrfs" 

成为:

 OPTIONS="--graph /srv/docker --storage btrfs" 

这使得docker守护进程的(意外的)后果不能启动。 这是来自'systemctl status docker'的debugging消息:

加载(/usr/lib/systemd/system/docker.service;启用;供应商预设:禁用)活动:失败(结果:退出自从星期四2015-02-05 20:13:31 EET; 14s前文档: http ://docs.docker.com进程:776 ExecStart = / usr / bin / docker -d -H fd:// $ OPTIONS(code = exited,status = 2)主PID:776退出,状态= 2)

您的/srv/docker/docker.conf文件中有错误。

 $OPTIONS="--graph /srv/docker --storage btrfs" 

variables的规格不应以$开头; $只能在以后使用variables时使用。

将其更改为:

 OPTIONS="--graph /srv/docker --storage btrfs" 

首先,我要感谢迈克尔·汉普顿的回答。 这是现货,我从来没有发现错误的'$'('OPTIONS = …'而不是'$ OPTIONS = …')。

现在,问题是使用命令行选项。 在docker文档中,更改存储驱动程序的参数如下:

 --storage btrfs 

请记住,这是1.4版本的文档,这是我的版本。 唉,“docker –help”certificate了正确的语法是:

 --storage-driver btrfs 

所以,在进行必要的更改之后,守护进程启动正确,图像在'/ srv / docker'目录中被拉出来,一切正常。

道德上总是对官方文件有点不信任,特别是对于像Docker这样的重大开发项目。 再次感谢所有的贡献。

最初我花了相当多的时间来处理/etc/init.d/docker和它的configuration文件/etc/default/docker的前一个upstart / sysv initscript。 奇怪的是,无论我尝试了什么,它都不起作用,最终我意识到systemd直接忽略了这两者,因为我直接使用了遗留脚本。

build议的解决scheme似乎并没有在我的15.04版本上正常工作,因为dockersystemdconfiguration文件中缺lessEnvironmentFile ,所以我们在lxc-docker-1.7.0安装了lxc-docker-1.7.0

一个选项是就地编辑它,并使用这个命令添加它:

 sudo systemctl edit docker --full 

但是这个风险会被下一次更新覆盖,所以我的解决scheme是通过运行来创build一个覆盖

 sudo systemctl edit docker 

然后我决定在新的configuration重写中重新定义ExecStart命令,而不是在/srv/docker/docker.conf添加和引用一个新的configuration文件。

 [Service] ExecStart= ExecStart=/usr/bin/docker -d -H fd:// --storage btrfs 

上面的代码片段没有任何错误,由于一些奇怪的原因,与systemd读取其configuration覆盖的方式有关,需要首先使用空值定义值,然后重新分配给新值。

一旦我这样做,守护进程开始愉快,我终于能够使用它。