Hello, as it took me a while to find a solution to this problem, I though I might post here in case someone else happens to struggle with a similar situation ![]()
My dev environment is based on Debian 10 with a ZFS root filesystem located on a pool (rpool) whose layout is as follows:
$ sudo zfs list -r rpool NAME USED AVAIL REFER MOUNTPOINT rpool 247G 652G 96K / rpool/ROOT 40.2G 652G 96K none rpool/ROOT/debian-10 40.2G 652G 10.5G / rpool/ROOT/debian-10/opt 4.36G 652G 1.16G /opt rpool/ROOT/debian-10/var 11.1G 652G 96K /var rpool/ROOT/debian-10/var/cache 11.0G 652G 11.0G /var/cache rpool/ROOT/debian-10/var/log 18.5M 652G 18.5M legacy rpool/ROOT/debian-10/var/tmp 47.4M 652G 47.4M legacy rpool/home 139G 652G 92.4G /home rpool/home/root 1.93M 652G 948K /root rpool/swap 68.0G 715G 4.60G - rpool/tmp 620K 652G 620K legacy
When I started using Docker, I discovered that it was creating a lot of datasets right under the root dataset:
$ sudo zfs list -r rpool NAME USED AVAIL REFER MOUNTPOINT rpool 246G 653G 96K / rpool/ROOT 39.2G 653G 96K none rpool/ROOT/debian-10 39.2G 653G 10.3G / rpool/ROOT/debian-10/0594a.... 5.04M 653G 53.9M legacy rpool/ROOT/debian-10/094e0.... 560K 653G 56.0M legacy rpool/ROOT/debian-10/0a248.... 200K 653G 44.9M legacy rpool/ROOT/debian-10/12dc5.... 568K 653G 56.0M legacy rpool/ROOT/debian-10/17829.... 108K 653G 56.0M legacy rpool/ROOT/debian-10/1a6ce.... 160K 653G 78.3M legacy rpool/ROOT/debian-10/1c27c.... 1.62M 653G 55.4M legacy rpool/ROOT/debian-10/20f13.... 144K 653G 57.6M legacy rpool/ROOT/debian-10/254ed.... 44.8M 653G 44.8M legacy rpool/ROOT/debian-10/2997e.... 7.79M 653G 51.9M legacy rpool/ROOT/debian-10/2e725.... 20.9M 653G 76.4M legacy ... ...
This is obviously quite annoying and it would be much preferable to have all Docker related datasets grouped under a dedicated one.
I immediately jumped to the Docker documentation, which BTW is really well done, and found the [Docker ZFS Storage page] (docs.docker .com/storage/storagedriver/zfs-driver/) giving a lot of detailed explanations about ZFS itself and stating that creating a dataset that gets mounted under /var/lib/docker should be the solution.
I did apply the recommendation, verifying that the ZFS dataset was well mounted (/var/lib/docker has to be empty!), only to discover that, unfortunately, even though I followed the procedure, Docker still referenced the root dataset as its Parent Dataset:
$ sudo zfs list -r rpool NAME USED AVAIL REFER MOUNTPOINT rpool 246G 653G 96K / rpool/ROOT 39.2G 653G 96K none rpool/ROOT/debian-10 39.2G 653G 10.3G / rpool/ROOT/debian-10/opt 4.36G 652G 1.16G /opt rpool/ROOT/debian-10/var 11.1G 652G 96K /var rpool/ROOT/debian-10/var/cache 11.0G 652G 11.0G /var/cache rpool/ROOT/debian-10/var/log 18.5M 652G 18.5M legacy rpool/ROOT/debian-10/var/tmp 47.4M 652G 47.4M legacy rpool/docker 96K 652G 96K /var/lib/docker ... $ docker info Client: Debug Mode: false Server: ... Server Version: 19.03.9 Storage Driver: zfs Zpool: rpool Zpool Health: ONLINE Parent Dataset: rpool/ROOT/debian-10 ... Kernel Version: 4.19.0-9-amd64 Operating System: Debian GNU/Linux 10 (buster) OSType: linux Architecture: x86_64 ... Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ ...
Digging deeper in the Docker documentation I finally found out that the docker daemon can be configured using an /etc/docker/daemon.json file (as described here), while all the possible options are listed on the dockerd pageβ¦
Thus, to specify the Parent Dataset to be used by the Docker daemon for its own storage, one needs to first stop the docker service, create/modify the /etc/docker/daemon.json file content and then start the docker daemon again, as follows:
$ sudo systemctl stop docker $ sudo nano /etc/docker/daemon.json { "storage-opts": [ "zfs.fsname=rpool/docker"] } $ sudo systemctl start docker
And now, docker will create its legacy datasets at the desired location:
$ docker info ... Parent Dataset: rpool/docker $ sudo zfs list -r rpool/docker NAME USED AVAIL REFER MOUNTPOINT rpool/docker 287M 652G 96K /var/lib/docker rpool/docker/0225c9b... 192K 652G 44.9M legacy rpool/docker/0e3f3f5... 20.8M 652G 64.6M legacy rpool/docker/28b0bc9... 144K 652G 178M legacy rpool/docker/2ee79f0... 1.62M 652G 43.7M legacy ... ...
Hopefully this information will be useful to others!