Docker 服务在 ZFS 之前启动

Ita*_*Ale 8 ubuntu zfs zfsonlinux docker ubuntu-16.04

我在 Ubuntu 16.04 上使用 Docker CE,使用 ZFS 作为 Docker 的存储。设置非常标准:

  1. 有一个 zpool 有多个磁盘
  2. 在 zpool 上,有一个带有 mountpoint 的 zfs 文件系统/var/lib/docker
  3. Docker 看到文件系统是 ZFS,并自动使用它

大部分时间一切正常。但是,有时当我的 VM 启动时,zpool 无法挂载。我相信(虽然我不是 100% 确定)这是因为 Docker 服务在 ZFS 文件系统安装之前启动,实际上我看到/var/lib/docker在根 FS 上创建了一个文件夹。

如何确保在挂载所有 ZFS 文件系统之前 Docker 服务不会启动?

Ita*_*Ale 11

我能够通过做两件事来解决这个问题。请注意,一个人可能就足够了。

首先,明确告诉 Docker 使用 ZFS 作为文件系统,通过写入{"storage-driver": "zfs"}文件/etc/docker/daemon.json. (如果该文件存在于您的磁盘中,则只需添加存储驱动程序密钥)

其次,在文件中创建以下 systemd 单元/etc/systemd/system/docker-wait-zfs.service

[Unit]
Description=Wait for ZFS before starting Docker
RequiredBy=docker.service
Before=docker.service
Requires=zfs.target
After=zfs.target

[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

然后执行:

systemctl enable docker-wait-zfs.service
Run Code Online (Sandbox Code Playgroud)