我们已经docker-ce
在一些 Ubuntu 16.04 LTS 机器上运行。这些机器有一个用于操作系统的快速 SSD,以及一个用于 docker 容器等大量数据的 ZFS 阵列。
每次我被要求修复 docker 设置时,似乎更新都会重置配置以将 ZFS 阵列用于其数据。
这可能是因为大多数指南都相当老了。受这篇文章启发,我的更改如下:
在中,像这样/lib/systemd/system/docker.service
添加:-g "/mnt/var/lib/docker"
ExecStart=/usr/bin/dockerd -g "/mnt/var/lib/docker" -H fd://
还要推迟服务的启动,直到 ZFS 阵列在线:
[Unit]
After=network.target docker.socket firewalld.service zfs-mount.service
尽管这似乎是根据文档和旧文章添加不同目录的推荐方法,但这必须是过时的,因为此文件在每次更新时都会重置,我必须手动将它们改回来。重新启动服务后,它可以正常工作,直到下一次更新。
这个问题与
systemd
使用文件有关。如 中
man file-hierarchy
所述,该/lib
目录用于只读供应商提供的文件,而/etc
用于“系统特定配置”,这可能会覆盖/lib
.放置修改的正确位置在
/etc/sytemd/system
.您可以使用 in 中的文件完全替换有问题的文件,
/etc/
也可以使用“插入式”模板仅覆盖文件的一部分。搜索
man systemd.unit
“Drop-in”了解详情。在软件包升级期间,其中的文件
/lib
将继续被覆盖,而对的更改/etc/
将被保留。关于 /lib 与 /etc 的建议通常适用,而不仅仅是
systemd
.systemd 插入单元示例
在
/etc/systemd/system/docker.service.d/10-fix-execstart.conf
:因此,您遵循一种模式在以您要覆盖的服务命名的目录中创建一个文件,仅声明您要覆盖的特定部分和指令。
来自
man systemd.service
: