Some of the links shared in this post are affiliate links. If you click on the link and make a purchase, we will receive an affiliate commission at no additional cost to you.
Docker Compose StackをネイティブまたはPortainer経由で起動すると、以下のようなエラーメッセージが表示されることがある:
Failed to deploy a stack: service "docker" refers to undefined volume mnt/docker: invalid compose project
Docker Composeファイルでボリュームが正しく定義されていないか、存在しないディレクトリを参照している場合、「Failed to deploy stack: service ‘docker’ refers to undefined volumemnt/docker
: invalid compose project」というエラーが発生する。
エラーの説明
このエラーは通常、Docker Composeファイル(docker-compose.yml
)にボリュームパスまたはボリュームラベルが含まれているために発生する:
- が正しくフォーマットされていない、
- 存在しないか
- は明確に定義されていなかった。
エラーメッセージは、ボリュームmnt/dockerが
正しく定義または参照されていないことを示している。これは、Docker Composeが指定されたパスを解決または作成できないことを意味する。
考えられる原因
- 先頭のスラッシュがない:ボリュームへのパスが
/で始まって
いない。このため、Dockerはパスを相対パスとして解釈するが、これは正しくない。 - ディレクトリが存在しない:指定されたディレクトリパス
(/mnt/docker
)がホストシステム上に存在しない。 - 入力エラーまたは構文が正しくない:パスまたはコンポーズファイルのタイプミスにより、定義が不正確になる。
- ボリュームの定義がないか、正しく配置されていない:名前付きボリュームを使用する場合は、コンポーズファイルの
volumes: の
下に定義する必要がある。
解決策の手順
1. ボリュームパスをチェックし、修正する
- Docker Composeファイルのパスは、絶対パスで正しいものでなければならない。
- ホストシステム上にパスが存在することを確認する。
例を挙げよう:
services:
my_service:
image: my_image:latest
volumes:
- /mnt/docker:/data
mnt/dockerが
存在することを確認する。存在しない場合は、次のコマンドで作成する:
sudo mkdir -p /mnt/docker
2. パスにタイプミスがないかチェックする。
ボリュームの仕様にタイプミスがないか注意し、修正する。
違う:
先頭の”/”がない
volumes:
- mnt/docker:/data
その通りだ:
先頭の”/”
volumes:
- /mnt/docker:/data
3. 名前付きボリュームを正しく使用する
名前付きボリュームを使いたい場合は、Composeファイルのvolumes:
で明示的に定義する必要がある:
名前付きボリュームの例:
version: '3'
services:
app:
image: my_image:latest
volumes:
- mydata:/data
volumes:
mydata:
driver: local
driver_opts:
type: none
o: bind
device: /mnt/docker
ここで名前付きボリュームmydataが
定義され、パス/mnt/dockerに
リンクされる。deviceフィールドは
既存のディレクトリを指すようにする。
4. ディレクトリが存在し、正しい権限を持っていることを確認する。
認証とディレクトリの存在を確認する。Dockerは指定されたパスにアクセスし、書き込むことができなければならない:
ls -ld /mnt/docker
パスが存在し、読み書き可能であることを確認する。そうでない場合は、それに応じて権限を設定する:
sudo chmod 755 /mnt/docker
sudo chown $USER:$USER /mnt/docker
5. Docker Composeのバージョンを確認する。
使用するDocker Composeファイルが、インストールされているDocker Composeのバージョンと一致していることを確認する。名前付きボリュームやその他の高度な機能を使用するには、バージョン3以上を使用する。
service ‘docker’ refers to undefined volumemnt/docker
」というエラーは、ボリュームが正しく定義されていないか、パスが間違っている場合に発生する。この問題は通常、Docker Composeファイルとディレクトリ構造を注意深くチェックして修正し、名前付きボリュームが正しく定義されていることを確認することで解決できる。