laradock で 、ERROR: Named volume “data/minio/data:/export:rw” is used in service “minio” but no declaration was found in the volumes section. というエラーが発生。

.env ファイルにDATA_PATH_HOST=dataと書いてしまっていました。

本当は、以下のように ./data と設定したかったのです。

# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=./data

それを、以下のように、dataの前の ./ を書き忘れてしまい、標題のようなエラーが発生しました。

# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=data

DATA_PATH_HOST=./data と書きかえたら、問題が解消されました。

事態が改善するかもしれません。

もっと詳しく

Laradockをインストールした直後は通常、 env-example ファイルを .env というファイル名でコピーします。

その .env ファイルには DATA_PATH_HOST という項目があり、以下のような記述になっています。

# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=~/.laradock/data

この設定のままだと、MySQLのデータなどが、laradockフォルダの外に保存されます。

それはそれで便利なケースもありますが、プロジェクトごとに laradock フォルダの中にdataフォルダという名前で保存されるように設定しようとしました。

その時に変更するのが、 DATA_PATH_HOST という項目です。

この設定は、.envとは別のファイル、 docker-compose.yaml ファイルの中で、コンテナが使用するボリュームとして使われています。

https://github.com/laradock/laradock/blob/master/docker-compose.yml#L427-L428

### Minio ################################################
    minio:
      build: ./minio
      volumes:
        - ${DATA_PATH_HOST}/minio/data:/export
        - ${DATA_PATH_HOST}/minio/config:/root/.minio

もし、DATA_PATH_HOST の値が ./data ではなく、ただの data だとすると、はこれらの設定は以下のように解釈されます。

### Minio ################################################
    minio:
      build: ./minio
      volumes:
        - data/minio/data:/export
        - data/minio/config:/root/.minio

先頭が/~... など、相対パスとして使う記号から始まるボリュームは、ホストOSのファイルパスだと解釈されます。(今回は、こちらが正解でした。)

しかし、ただ data と書いてしまうと、それはホストOSのファイルパスではなく、「ボリューム名」として解釈されます。

Dockerは、data/minio/data と名付けられたボリュームの設定が、docker-compose.yamlのどこかに記述されていると解釈して探しますが、実際には、そんなものは書かれておらず、今回のエラーとなったようです。

HTMLでの相対パスの書き方とは、考え方が違う

HTMLでの外部ファイルへのリンクでは、先頭の ./ は、あってもなくても同じように動作します。

<script src="script.js"></script>
<script src="./script.js"></script>

しかし、docker-compose.yml の コンテナに使用するボリュームの設定では ./ があればファイルパス、なければ「Named Volume」という、全く異なった解釈となるようでした。

Compose file version 3 reference

https://docs.docker.com/compose/compose-file/#short-syntax-3