postgresコンテナを起動させたときに「FATAL: database "DBコンテナ名" does not exist」が出てコンテナ起動がうまくいきませんでした。
無理やりですが、動くようにできたのでその解決方法を備忘録としてまとめておきます。
環境は以下です。
- ConoHa VPS (メモリ 1GB/CPU 2Core/SSD 100GB)
- Ubuntu 20.04.1 LTS
- Docker: 19.03.13
- Docker Compose: 1.27.4
- redmine: latest (2020/9/27 執筆時点では、4.1.1が最新)
- postgres: latest (2020/9/27 執筆時点では、13.0が最新)
目次
エラー内容
postgresコンテナを起動させたときに以下のような「FATAL: database "DBコンテナ名" does not exist」エラーが出てコンテナ起動がうまくいきませんでした。
※以下のログは、redemimeコンテナを立ち上げたときのものです。
[2020-09-30 00:49:09.441] redmine | Caused by:
[2020-09-30 00:49:09.441] redmine | PG::ConnectionBad: FATAL: database "REDMINE_DB" does not exist
[2020-09-30 00:49:09.441] redmine | /usr/local/bundle/gems/pg-1.1.4/lib/pg.rb:56:in `initialize'
[2020-09-30 00:49:09.441] redmine | /usr/local/bundle/gems/pg-1.1.4/lib/pg.rb:56:in `new'
[2020-09-30 00:49:09.441] redmine | /usr/local/bundle/gems/pg-1.1.4/lib/pg.rb:56:in `connect'
[2020-09-30 00:49:09.442] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/postgresql_adapter.rb:692:in `connect'
[2020-09-30 00:49:09.450] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/postgresql_adapter.rb:223:in `initialize'
[2020-09-30 00:49:09.450] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/postgresql_adapter.rb:48:in `new'
[2020-09-30 00:49:09.450] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/postgresql_adapter.rb:48:in `postgresql_connection'
[2020-09-30 00:49:09.450] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:830:in `new_connection'
[2020-09-30 00:49:09.450] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:874:in `checkout_new_connection'
[2020-09-30 00:49:09.450] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `try_to_checkout_new_connection'
[2020-09-30 00:49:09.460] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:814:in `acquire_connection'
[2020-09-30 00:49:09.460] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:538:in `checkout'
[2020-09-30 00:49:09.460] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:382:in `connection'
[2020-09-30 00:49:09.460] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:1033:in `retrieve_connection'
[2020-09-30 00:49:09.460] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_handling.rb:118:in `retrieve_connection'
[2020-09-30 00:49:09.460] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/connection_handling.rb:90:in `connection'
[2020-09-30 00:49:09.460] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/tasks/database_tasks.rb:172:in `migrate'
[2020-09-30 00:49:09.466] redmine | /usr/local/bundle/gems/activerecord-5.2.4.2/lib/active_record/railties/databases.rake:60:in `block (2 levels) in <top (required)>'
[2020-09-30 00:49:09.466] redmine | /usr/local/bundle/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
[2020-09-30 00:49:09.466] redmine | Tasks: TOP => db:migrate
[2020-09-30 00:49:09.466] redmine | (See full trace by running task with --trace)
原因は?
エラー自体は、postgresコンテナで生成されるはずのDBがないと言っています。
実際、DBが生成されていないことが確認できました。
postgresコンテナは初期設定時に何かしら?を確認して、初期化するかしないかをチェックしています。この初期化チェックはDBが設定されていなくても、問題ないと判断され、初期化がスキップされてしまうみたいです。
[2020-09-30 00:49:03.998] db_redmine | PostgreSQL Database directory appears to contain a database; Skipping initialization
解決方法
非常に無理やりですが、postgresコンテナのDBを格納する先のボリュームを全削除してやったら、postgresコンテナの初期化が動いてDB生成されました。
結果、「FATAL: database "DBコンテナ名" does not exist」エラーも解決されました。
[注意]
この方法は、初回起動時のみ有効な方法です。
すでにDBに格納したものがある場合は、消えてしまうので気を付けてください。
まとめ
postgresコンテナの初期化判断はどのように行われているか分かりませんが、「FATAL: database "DBコンテナ名" does not exist」エラーがでたら、この解決方法を試してみると良いかもしれません。
ただし、DBがすでにある状態で、この解決方法を実行すると、DBがすべて消えてしまうのでご注意ください。
広告
Dockerをやるなら以下の書籍がオススメです。
Dockerとは何か?から複数のコンテナを管理することができるDocker Compose、Kubernetesまでまとめられています。
ConoHa VPS
は初期費用不要で月に数百円で利用できる仮想サーバのサービスです。以下のような方には非常にオススメのサービスとなっています!
- 勉強がてらLinuxの環境をちょっと触ってみたい
⇒管理者権限が実行可能なLinuxサーバ環境が構築可能です! - スモールスタートでサービスを提供して、うまくいったら規模をスケールアップしたい
⇒後からメモリサイズやCPU数などのスケールアップ/スケールダウン可能です! - AWSやGCPなどのクラウドサービスは高いので、もっと安くサーバ構築したい
⇒初期費用なし、月数百円(1時間単位も可)で利用可能です!
以上!
コメント