DockerサービスはZFSより先に起動します

DockerサービスはZFSより先に起動します

私は Ubuntu 16.04 で Docker CE を使用しており、Docker のストレージとして ZFS を使用しています。セットアップはほぼ標準的です。

  1. 複数のディスクを持つzpoolがあります
  2. zpool には、マウントポイントを持つ zfs ファイルシステムがあります/var/lib/docker
  3. DockerはファイルシステムがZFSであることを認識し、それを自動的に使用します。

ほとんどの場合、すべて正常に動作します。ただし、VM の起動時に、たまに zpool のマウントが失敗します。これは、ZFS ファイルシステムがマウントされる前に Docker サービスが起動し、実際に/var/lib/dockerルート FS にフォルダーが作成されているためだと考えています (100% 確信はありませんが)。

すべての ZFS ファイルシステムがマウントされるまで Docker サービスが開始されないようにするにはどうすればよいですか?

答え1

私は 2 つのことを行うことでこの問題を解決できました。1 つだけでも十分な場合があることに注意してください。

まず、{"storage-driver": "zfs"}ファイルに書き込むことで、Docker に 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

答え2

ここでの回答は、最近のアップデート後、私には役に立ちませんでした。ルート ドライブが ZFS を使用していない限り、"/etc/docker/daemon.json" に "{"storage-driver": "zfs"}" を含めることはできないようです。ZFS 上にあるコンテナーにフォルダーをマッピングしているだけなので、これは私には当てはまりませんでした。

これを修正するには、次の方法が有効です。

  1. sudo systemctl で docker.service を編集します。
  2. 次の内容を追加します。

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

答えここ、各行の機能についての説明が含まれています。

関連情報