概要
私はDockerコンテナにdocker runコマンドの-v, --volumeコマンドでNFS上のディレクトリをマウントしています. この状態でOSを再起動すると,DockerサービスがNFSのマウント前に起動してしまい,Dockerコンテナが正常にrestartできない問題が発生していました. 本記事ではこの問題の解決方法として,systemdのdrop-inファイルを使用して,NFSがマウントされるまでDockerサービスが起動しないように設定する方法をメモしておきます.
本記事の解決方法に行き着くにあたっては,下記の記事が参考になりました.
- Start docker after NFS mounts come online | The Danesh Project
- Ubuntu 20.04 LTS : NFS クライアント : Server World
- fstab - ArchWiki
私の開発環境は下記のとおりです.
OS | Ubuntu 20.04.4 LTS (amd64) |
---|---|
Docker version | 20.10.14, build a224086 |
NFSクライアントの設定
/etc/fstabには下記のように設定しています.systemdによるリモートファイルシステムの自動マウントの設定です.
設定変更した場合は,OSの再起動もしくはsudo mount /mnt/nas/dataでNFSをマウントします.
下記のコマンドで/mnt/nas/dataのマウントに対応するsystemdユニットを探します.ディレクトリパスのスラッシュ (/)をハイフン (-)に置き換えたものになっているようでした.
Dockerサービスの設定
drop-inファイルを格納するディレクトリを作成して,テキストエディタでdrop-inファイルを新規作成します.
drop-inファイル,wait-for-nfs.confには下記のように設定を記述します. 設定の詳しい解説については,概要に記載した参考記事をご覧ください.
Dockerサービスの再起動と動作確認
Dockerサービスを再起動します.Drop-Inの項目で,drop-inファイルを認識しているか確認します. 問題がなければ,OSを再起動した後は,NFSがマウントされてからDockerサービスが起動するようになっています.