[Portainer] Stack作成時、Gitリポジトリ内のファイルを使いたい
環境
・Ubuntu 24.04.1 LTS
・Portainer Business Edition(BE) 2.21.4
Portainerでは、Stackという機能(中身はdocker-compose)で複数のDockerコンテナをまとめることができる。
Stackでは、docker-compose.ymlなどの構成ファイルを含むGitリポジトリをpullしてきてStackを作成することが出来るのだが、以下のような一般的な構成で作成しようとしても出来ない。
version: '3.1'
services:
webapp:
image: nginx:latest
restart: always
ports:
- "3002:80"
volumes:
- ./static:/usr/share/nginx/html
この原因は、PortainerがGitリポジトリを参照するときにデフォルトではdocker-compose.ymlファイルしか読み込まないことにある。
リポジトリ内にdocker-compose以外の構成ファイル(上の例では./static以下のファイル)があったとしても、それらは無視される。
対応方法としては、Relative Path Supportを活用できる。
注意として、Portainer Community Edition(CE)ではRelative Path Supportはサポートされていないので注意。CEを使用している場合はBEにアップグレードするか、Portainer外でコンテナを作成する。docker-composeコマンドでコンテナ作成した場合、Portainer上では認識されるが一部機能が制限される。
Stack作成画面で Repository
を選択すると Enable relative path volumes
トグルがあるので、これを有効にする。 Local filesystem path
でリポジトリのパスを指定する。
例えば以下のように /mnt/pt-git
と指定すると、 /mnt/stacks/portainer-compose-unpacker/stacks/<<your-stack-name>>/
にリポジトリがCloneされる。docker-compose.ymlの変更などは必要なく、docker-composeコマンドを使用する場合と同様に相対パスでファイルを指定して使用できるようになる。