RailsをDockerで構築した際に引っかかったエラー

こんにちは!

今回はRailsをDockerで構築した際に引っかかったエラーについてまとめます。

環境

エラー① ActiveRecord::ConnectionNotEstablished

エラー発生タイミング

  • docker compose up後、ブラウザからlocalhost:3000へ接続

エラー文

connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?

エラー内容

解決策

  • config/database.ymlにhost: dbの指定を入れ忘れていた
    • dbはdocker-composeでpostgresqlのコンテナにつけた名前

エラー② ActiveRecord::DatabaseConnectionError

エラー発生タイミング

  • docker compose up後、ブラウザからlocalhost:3000へ接続

エラー文

There is an issue connecting to your database with your username/password, username: "ユーザー名".
Please check your database configuration to ensure the username/password are valid.

エラー内容

  • username/passwordで接続できない
  • username/passwordを再確認せよ

解決策

  1. docker-compose.ymlのenvironmentで指定しているuser/passwordと、config/database.ymlのusername/passwordが一致しているか確認

  2. 一致させた上で、以前のdbを削除し、再度ビルドすることで新しいusername/passwordを登録する

    • volume mountをしている場合
      • docker container , image, volumeの中でpostgresqlを含むものを全て削除する
    • bind mountをしている場合
      • ホストの該当ディレクトリを削除する
      • ./tmp/db:/var/lib/postgresql/dataであれば、/tmp/dbを削除

エラー③ ERROR [web internal] load build context

エラー発生タイミング

  • docker compose upでビルド中

エラー文

------
 > [web internal] load build context:
------
failed to solve: error from sender: open /mnt/c/Code/rails-docker/tmp/db: permission denied

エラー内容

  • build contextを読み込めない
  • /tmp/dbが開けない

解決策

  • カレントディレクトリに.dockerignoreファイルを作成し、該当フォルダをbuild contextに含めないようにする

.dockerignoreの中身

tmp/db

エラーの原因

  • docker-compose.ymlにbuild: .と記載している場合、dockerはカレントディレクトリのすべてのファイルをbuild contextとして送信しようとするが、該当のフォルダがdocker composeの実行ユーザーの権限で読み込めずにパーミッションエラーになっている

参考:

teratail.com

エラー④ActiveRecord::ConnectionNotEstablished

 エラー文

connection to server at "IPアドレス", port 5432 failed: FATAL: password authentication failed for user "root"

エラー内容

  • rootユーザーのパスワードが一致しない

解決策

  • docker-compose.ymlのenvironmentに、POSTGRES_USER: ユーザー名を追記し、ユーザーを作成する

エラーの原因

  • ユーザーを作成していないのでrootユーザーで認証しようとしている

おわりに

今回はRailsをDockerで構築した際に引っかかったエラーについてまとめました。Dockerにも大分慣れてきたところでしたが、思いがけずエラーにたくさん遭遇しました。ただ、これらの対処を通して更にDockerの理解が深まったので良い経験になりました。

98/100