環境
macOS
Docker
PostgresSQL
経緯
下記サイトを参考に、Spring-boot+PostgresSQL環境で勉強したかったので、docker-composeで環境作成。
(下記サイト様は素晴らしく、独自で追加した内容が悪かったという流れです)
コンテナdownしてもデータを残しておきたかったので、サイトを渡り歩いてdataをhostのフォルダと繋げてみました。
version: '3.2'
services:
db:
image: postgres:latest
#省略
volumes:
- "$PWD/db_data/:/var/lib/postgresql/data"
- "$PWD/init_db/:/docker-entrypoint-initdb.d/"
java:
#省略
エラー内容
docker-compose up -dするものの、docker ps で確認すると、sb_dbのみExit(1)になる。
log見ると、
2021-03-13 05:24:51.750 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2021-03-13 05:24:51.750 UTC [1] LOG: listening on IPv6 address "::", port 5432
2021-03-13 05:24:51.765 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-03-13 05:24:51.908 UTC [27] LOG: database system was shut down at 2021-02-28 11:28:55 UTC
2021-03-13 05:24:51.921 UTC [27] LOG: invalid primary checkpoint record
2021-03-13 05:24:51.922 UTC [27] PANIC: could not locate a valid checkpoint record
2021-03-13 05:24:51.924 UTC [1] LOG: startup process (PID 27) was terminated by signal 6: Aborted
2021-03-13 05:24:51.924 UTC [1] LOG: aborting startup due to startup process failure
2021-03-13 05:24:51.934 UTC [1] LOG: database system is shut down
自分で追加した[- "$PWD/db_data/:/var/lib/postgresql/data"]をコメントアウトするとエラーが出ないのでここが諸悪の根源。
うまくいった方法
上記サイトを参考に、データのマウントする場所をhostでなく、dockerのvolumeに変更
#省略
volumes:
- "dbdata:/var/lib/postgresql/data"
#省略
volumes:
dbdata:
postgresSQLのdockerはdata部がVOLUMEとのこと。
コンテナ内部に置いていないものをhostとつなげるってところが無理があったのだという理解です。
他のサイトでもvolume作ってそことつなげるが普通とみたいです。
コンテナdownしてもデータが消えなきゃいいのでこれで解決です。
ようやくメインのSpringのお勉強にうつれそう。