概要
- 今までMySQLのDBコンテナを使っていたが、訳あってPostgreSQLのコンテナに返る事になった。
- DBコンテナがエラーで起動せずちょっと詰まったので簡単にまとめておく。
問題までの経緯
-
docker-composer.ymlのdbサービスで下記のように記載した。
docker-composer.ymldb: build: context: ./.hoge/db dockerfile: Dockerfile ports: - 3542:5432 environment: POSTGRES_DATABASE: hoge_app POSTGRES_USER: hoge_app POSTGRES_PASSWORD: xxxxxxxx TZ: "Asia/Tokyo" volumes: - db-volume:/var/lib/postgresql/data:cached
-
docker-composer up
実行しコンテナの起動を試みた。
問題発生
-
下記のエラーがでてdbサービスのコンテナが起動しない。
YYYY-MM-DD HH:MM:SS initdb: error: directory "/var/lib/postgresql/data" exists but is not empty YYYY-MM-DD HH:MM:SS initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
解決までの経緯
-
ちょっと調べたところどうやらDBのデータ永続化ボリュームにすでにデータがあるためdbサービスを初期化できない旨のエラーっぽい。
-
ホストPCで下記コマンドを実行してボリューム一覧を確認する。
docker volume ls
-
下記のように出力された。(testって付いてる方はテストコード用のdbのボリューム)
DRIVER VOLUME NAME local hoge-app_db-volume local hoge-app_test-db-volume
-
どうやら
hoge-app_db-volume
の方のボリュームが存在し、空じゃないから初期化できずエラーになるっぽい。 -
すでにDBで保存している情報は失われるが、下記コマンドを実行して当該のボリュームを削除した。
docker volume rm hoge-app_db-volume
-
再び
docker-composer up
をすると問題なくコンテナが起動した。