我想在服务器上部署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版本上正常工作,因为docker的systemdconfiguration文件中缺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覆盖的方式有关,需要首先使用空值定义值,然后重新分配给新值。
一旦我这样做,守护进程开始愉快,我终于能够使用它。