2022/03/26

NFSマウント後にDockerサービスが起動するように設定する

概要

私はDockerコンテナにdocker runコマンドの-v, --volumeコマンドでNFS上のディレクトリをマウントしています. この状態でOSを再起動すると,DockerサービスがNFSのマウント前に起動してしまい,Dockerコンテナが正常にrestartできない問題が発生していました. 本記事ではこの問題の解決方法として,systemdのdrop-inファイルを使用して,NFSがマウントされるまでDockerサービスが起動しないように設定する方法をメモしておきます.

本記事の解決方法に行き着くにあたっては,下記の記事が参考になりました.

私の開発環境は下記のとおりです.

OS Ubuntu 20.04.4 LTS (amd64)
Docker version 20.10.14, build a224086

NFSクライアントの設定

/etc/fstabには下記のように設定しています.systemdによるリモートファイルシステムの自動マウントの設定です.

1
192.168.0.128:/volume2/data /mnt/nas/data nfs defaults,noauto,x-systemd.automount,x-systemd.device-timeout=30,_netdev 0 0

設定変更した場合は,OSの再起動もしくはsudo mount /mnt/nas/dataでNFSをマウントします.

下記のコマンドで/mnt/nas/dataのマウントに対応するsystemdユニットを探します.ディレクトリパスのスラッシュ (/)をハイフン (-)に置き換えたものになっているようでした.

1
2
3
4
$ systemctl list-units | grep automount
(略)
  mnt-nas-data.automount loaded active running mnt-nas-data.automount
(略)

Dockerサービスの設定

drop-inファイルを格納するディレクトリを作成して,テキストエディタでdrop-inファイルを新規作成します.

1
2
$ sudo mkdir -p /etc/systemd/system/docker.service.d/
$ sudo vi /etc/systemd/system/docker.service.d/wait-for-nfs.conf

drop-inファイル,wait-for-nfs.confには下記のように設定を記述します. 設定の詳しい解説については,概要に記載した参考記事をご覧ください.

1
2
3
[Unit]
After=mnt-nas-data.automount
Wants=mnt-nas-data.automount

Dockerサービスの再起動と動作確認

Dockerサービスを再起動します.Drop-Inの項目で,drop-inファイルを認識しているか確認します. 問題がなければ,OSを再起動した後は,NFSがマウントされてからDockerサービスが起動するようになっています.

1
2
3
4
5
6
7
8
9
10
$ sudo systemctl restart docker
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
    Drop-In: /etc/systemd/system/docker.service.d
             └─wait-for-nfs.conf
     Active: active (running) since Sat 2022-03-26 12:17:31 JST; 46min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
(略)

0 件のコメント:

コメントを投稿