Я использую Docker CE в Ubuntu 16.04 с ZFS в качестве хранилища для Docker. Настройка довольно стандартна:
/var/lib/docker
.Большую часть времени все работает. Однако время от времени, когда моя виртуальная машина загружается, zpool не может смонтировать. Я считаю (хотя я не уверен на 100%), что это связано с тем, что служба Docker запускается до того, как файловая система ZFS смонтирована, и на самом деле я вижу /var/lib/docker
папка, созданная в корне ФС.
Как я могу гарантировать, что служба Docker не запустится, пока не будут смонтированы все файловые системы ZFS?
Я смог решить эту проблему, выполнив две вещи. Обратите внимание, что одного может быть достаточно.
Во-первых, явно укажите 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
Затем выполните:
systemctl enable docker-wait-zfs.service
Ответ здесь не сработал для меня после недавнего обновления. Кажется, у вас больше не может быть "{" storage-driver ":" zfs "}" в вашем "/etc/docker/daemon.json", если только корневой диск не использует ZFS. Это было неприменимо ко мне, поскольку я просто сопоставлял папки с моими контейнерами, которые находятся в ZFS.
Чтобы исправить это, сработало следующее:
Добавьте следующее содержимое:
After=zfs-mount.service
Requires=zfs-mount.service
Wants=zfs-mount.service
BindsTo=zfs-mount.service
Ответ Вот, содержит объяснение того, что делает каждая строка.