はじめに
QNAPのContainerStationでPortainerのコンテナを作成後、「CPUリミット」や「メモリー利用量」を変更すると、設定内容を適用するためのコンテナ再起動で、起動に失敗する。対症療法を示す。
本事象を確認した環境
- ContainerStationのバージョンは、V2.6.0.483
- Portainerのバージョンは、2.14.0
Container StationでPortainerのコンテナを作成
QNAPのContainerStationでPortainerのコンテナを作成する場合、「共有フォルダ」にDockerにSocket接続するための"/var/run/docker.sock"を設定しようとしても、フォルダツリーに現れず、直接入力もできないため、設定できない。
対処法を検索してみると、QNAPにssh接続してコマンドラインからコンテナを作成する手順が見つかる。
実際、この手順でコンテナを作成してみる。作成後、Portainerに接続して、"local"のパネルの右下を見ると、"/var/run/docker.sock"を介して接続していると表示される。
Container Stationで設定変更すると再起動に失敗
Container Stationでは、「設定」のパネルで、「CPUリミット」や「メモリー利用(量)」の設定ができる。先のCLIでのコンテナ作成では、この部分は"CPUは100%"、"メモリーは全量"の設定になっている。これを変更し、「適用」ボタンを押すと、コンテナは再起動される。
実施すると再起動に失敗する。メッセージによるとdocker-composeに失敗しているようである。
対症療法
とりあえずの回避策としては、dockerへのSocket接続をAgent経由の接続に変更する。
QNAPにssh接続してコマンドラインから"portainer/agent"のコンテナを作成する。作成したAgentのコンテナは、Container Stationから「設定」の変更を行っても再起動に失敗しない。
次いで、Container StationのGUIでPortainerのコンテナを再作成する。この時、ホストとの共有フォルダとして"/var/run/docker.sock"を指定しない(そもそもできないが)。
Portainerに接続して、"Environments"からDockerにAgent経由で接続する。"nas332x_arm64"がそれだがパネルの右下を見るとAgent経由で接続している。
このPortainerコンテナは、Container StationのGUIで作成したものであり、「CPUリミット」や「メモリ利用(量)」などの設定を変更しても、変更内容適用のための再起動に失敗しない。