Der Docker-Dienst startet vor ZFS

Der Docker-Dienst startet vor ZFS

Ich verwende Docker CE unter Ubuntu 16.04 mit ZFS als Speicher für Docker. Die Einrichtung ist ziemlich standardmäßig:

  1. Es gibt einen Zpool mit mehreren Festplatten
  2. Auf dem Zpool befindet sich ein ZFS-Dateisystem mit Einhängepunkt /var/lib/docker.
  3. Docker erkennt, dass es sich bei dem Dateisystem um ZFS handelt und verwendet es automatisch

Meistens funktioniert alles. Allerdings kann es hin und wieder vorkommen, dass der Zpool nicht gemountet wird, wenn meine VM hochfährt. Ich glaube (bin mir aber nicht 100 % sicher), dass das daran liegt, dass der Docker-Dienst gestartet wird, bevor das ZFS-Dateisystem gemountet wird, und tatsächlich sehe ich, dass /var/lib/dockerauf dem Stamm-FS ein Ordner erstellt wurde.

Wie kann ich sicherstellen, dass der Docker-Dienst erst gestartet wird, wenn alle ZFS-Dateisysteme gemountet sind?

Antwort1

Ich konnte das Problem lösen, indem ich zwei Dinge tat. Beachten Sie, dass eines allein ausreichen könnte.

Weisen Sie Docker zunächst ausdrücklich an, ZFS als Dateisystem zu verwenden, indem Sie {"storage-driver": "zfs"}in die Datei schreiben /etc/docker/daemon.json. (Wenn die Datei auf Ihrer Festplatte vorhanden ist, fügen Sie einfach den Schlüssel „storage-driver“ hinzu.)

Zweitens erstellen Sie die folgende systemd-Einheit in der Datei /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

Führen Sie dann Folgendes aus:

systemctl enable docker-wait-zfs.service

Antwort2

Die Antwort hier hat bei mir nach einem kürzlichen Update nicht funktioniert. Es scheint, dass Sie in Ihrer Datei "/etc/docker/daemon.json" nicht mehr "{"storage-driver": "zfs"}" haben können, es sei denn, das Stammlaufwerk verwendet ZFS. Dies traf auf mich nicht zu, da ich nur Ordner meinen Containern zugeordnet habe, die sich zufällig auf ZFS befinden.

Um dieses Problem zu beheben, hat Folgendes geholfen:

  1. sudo systemctl docker.service bearbeiten
  2. Fügen Sie den folgenden Inhalt hinzu:

    After=zfs-mount.service Requires=zfs-mount.service Wants=zfs-mount.service BindsTo=zfs-mount.service

Die AntwortHier, enthält eine Erklärung, was jede Zeile bewirkt.

verwandte Informationen