Ubuntu
Docker 服務在 ZFS 之前啟動
我在 Ubuntu 16.04 上使用 Docker CE,ZFS 作為 Docker 的儲存。設置非常標準:
- 有一個具有多個磁碟的 zpool
- 在 zpool 上,有一個帶有 mountpoint 的 zfs 文件系統
/var/lib/docker
。- Docker 發現文件系統是 ZFS,並自動使用它
大部分時間一切正常。但是,有時當我的虛擬機啟動時,zpool 無法掛載。我相信(雖然我不是 100% 確定)這是因為 Docker 服務在 ZFS 文件系統掛載之前啟動,實際上我看到
/var/lib/docker
在根 FS 上創建了一個文件夾。如何確保 Docker 服務在所有 ZFS 文件系統都掛載後才啟動?
我可以通過做兩件事來解決這個問題。請注意,一個人可能就足夠了。
首先,通過寫入文件明確告訴 Docker 使用 ZFS 作為文件
{"storage-driver": "zfs"}
系統/etc/docker/daemon.json
。(如果文件存在於您的磁碟中,則只需添加 storage-driver 密鑰)其次,在文件中創建以下 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
然後執行:
systemctl enable docker-wait-zfs.service