Ubuntu

Docker 服務在 ZFS 之前啟動

  • November 14, 2019

我在 Ubuntu 16.04 上使用 Docker CE,ZFS 作為 Docker 的儲存。設置非常標準:

  1. 有一個具有多個磁碟的 zpool
  2. 在 zpool 上,有一個帶有 mountpoint 的 zfs 文件系統/var/lib/docker
  3. 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

引用自:https://serverfault.com/questions/904421