I am using Docker CE on Ubuntu 16.04, with ZFS as storage for Docker. Setup is pretty much standard:
- There's a zpool that has multiple disks
- On the zpool, there's a zfs filesystem with mountpoint
/var/lib/docker
. - Docker sees that the filesystem is ZFS, and uses that automatically
Everything works most of the time. However, once in a while when my VM boots up, the zpool fails to mount. I believe (though I am not 100% sure) that this is because the Docker service starts before the ZFS filesystem is mounted, and in fact I see a /var/lib/docker
folder created on the root FS.
How can I ensure that the Docker service does not start until all ZFS filesystems are mounted?
Best Answer
I was able to solve this by doing two things. Note that one alone might be sufficient.
First, explicitly tell Docker to use ZFS as filesystem, by writing
{"storage-driver": "zfs"}
in the file/etc/docker/daemon.json
. (If the file exists in your disk, then just add the storage-driver key)Second, create the following systemd unit in the file
/etc/systemd/system/docker-wait-zfs.service
:Then execute: