コンテンツへスキップ
Home » Docker-Compose: スタックのデプロイに失敗しました: サービスが未定義のボリュームを参照しています – 解決策

Docker-Compose: スタックのデプロイに失敗しました: サービスが未定義のボリュームを参照しています – 解決策

Advertisements

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が指定されたパスを解決または作成できないことを意味する。

考えられる原因

  1. 先頭のスラッシュがない:ボリュームへのパスが/で始まっていない。このため、Dockerはパスを相対パスとして解釈するが、これは正しくない。
  2. ディレクトリが存在しない:指定されたディレクトリパス(/mnt/docker)がホストシステム上に存在しない。
  3. 入力エラーまたは構文が正しくない:パスまたはコンポーズファイルのタイプミスにより、定義が不正確になる。
  4. ボリュームの定義がないか、正しく配置されていない:名前付きボリュームを使用する場合は、コンポーズファイルの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ファイルとディレクトリ構造を注意深くチェックして修正し、名前付きボリュームが正しく定義されていることを確認することで解決できる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Mastodon