はじめに
docker-compose.ymlにpostgressのimagesを定義追加、起動したところ表題のエラーが発生しました。
解決方法をまとめます。
問題
docker-compose.ymlにdb定義のimageを追加し、コンポーネントを起動したところエラーが発生した。
エラーとなった定義
docker-compose.yml
version: "3.8"
services:
client:
build: .
container_name: my-container
ports:
- "5173:5173"
depends_on:
- api
volumes:
- .:/app
- /app/node_modules
api:
build: ./todo-api
container_name: api
ports:
- "3000:3000"
db:
image: postgres
container_name: postgres-db
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- pgdata:/var/lib/postgresql/data
原因
トップレベル(最下部)にvolumes:pgdataを記載していなかったため。
ボリュームとは
公式ドキュメントより引用
ボリュームとは、Docker コンテナーにおいて生成され利用されるデータを、永続的に保持する目的で利用される仕組みです。
docker-compose.yml
version: "3.8"
services:
client:
build: .
container_name: my-container
~~ 省略 ~~
db:
image: postgres
container_name: postgres-db
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- pgdata:/var/lib/postgresql/data
dbサービスでvolumes:- pgdata:/var/lib/postgresql/dataを指定していたにも関わらず、肝心のvolumesが作成されていないため、参照できずにエラーとなっていました。
解決方法
volumes:pgdataを追記する。
docker-compose.yml
version: "3.8"
services:
client:
build: .
container_name: my-container
ports:
- "5173:5173"
~~ 省略 ~~
db:
image: postgres
container_name: postgres-db
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- pgdata:/var/lib/postgresql/data
+ volumes:
+ pgdata:
参考資料
