##はじめに
Docker ComposeでRailsの環境構築を行う際にDB作成時点でエラーが出た件に関するメモ。
##環境
Docker for Mac
Docker Eingine : 19.03.8
docker-compose : v3
##エラー箇所
1:Rails開発環境用の作業ディレクトリを作成。
2:ディレクトリ内にRails実行環境用のイメージ作成用のDockerfileの作成と内容の記述。
3:Gemfileの作成と内容の記述。
4:中身が空のGemfile.lockファイルを作成。
5:docker-compose.ymlファイルを作成と内容の記述。
6:ymlファイルで定義した内容のビルドコマンド実行。
7:GemfileとGemfile.lockの更新を反映させるために、docker-compose buildコマンド実行。
8:Railsで使用するデータベース設定をdatabase.ymlに追加。
9:ymlに定義したサービスを起動。
10:Railsで使用するデータベースを作成。 ⬅︎ココ
##内容
DB作成コマンド実行
$ docker-compose run web rails db:create
エラー内容
could not translate host name "db" to address: Name or service not known
Couldn't create 'myapp_development' database. Please check your configuration.
rails aborted!
PG::ConnectionBad: could not translate host name "db" to address: Name or service not known
解決策
$ docker-compose up
➡︎一旦、9の手順に戻って、デタッチトモードでなく普通にサービス起動してみた。
Starting ror_db_1 ... done
ror_web_1 is up-to-date
Attaching to ror_db_1, ror_web_1
web_1 | => Booting Puma
web_1 | => Rails 5.2.4.2 application starting in development
web_1 | => Run `rails server -h` for more startup options
web_1 | Puma starting in single mode...
web_1 | * Version 3.12.4 (ruby 2.4.0-p0), codename: Llamas in Pajamas
web_1 | * Min threads: 5, max threads: 5
web_1 | * Environment: development
web_1 | * Listening on tcp://0.0.0.0:3000
web_1 | Use Ctrl-C to stop
db_1 | Error: Database is uninitialized and superuser password is not specified.
db_1 | You must specify POSTGRES_PASSWORD to a non-empty value for the
db_1 | superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
db_1 |
db_1 | You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
db_1 | connections without a password. This is *not* recommended.
db_1 |
db_1 | See PostgreSQL documentation about "trust":
db_1 | https://www.postgresql.org/docs/current/auth-trust.html
ror_db_1 exited with code 1
➡︎すると、上記のようにパスワードが特定できないやらパスワードを指定しろやら怒られているようだったので、これに関して調べ見てみると全く同じエラーに直面している記事に辿り着いたのでありがたく参考にさせて頂いて、docker-compose.ymlファイルを書き換えました。
services:
db:
image: postgres
environment: //追加部分
POSTGRES_HOST_AUTH_METHOD: 'trust' //追加部分
➡︎次に、再度ymlを起動するコマンドを実行してみる。
$ docker-compose up
Recreating ror_db_1 ... done
Recreating ror_web_1 ... done
Attaching to ror_db_1, ror_web_1
➡︎これでDBがしっかり起動するのが確認できたので、-dオプションを追加してymlを再起動する。
$ docker-compose up -d
➡︎これでymlの起動が完了したので、最後にデータベースを作成する。
$ docker-compose run web rails db:create
➡︎完了です。