RailsをDockerで構築した際に引っかかったエラー
こんにちは!
今回はRailsをDockerで構築した際に引っかかったエラーについてまとめます。
環境
- ruby 3.2.2
- rails 7.0.6
- Docker Desktop 4.28.0
- WSL2
- postgresql 12
エラー① 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?
エラー内容
- postgresqlに接続できない
- postgresqlは起動しているか?
解決策
- 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を再確認せよ
解決策
docker-compose.ymlのenvironmentで指定しているuser/passwordと、config/database.ymlのusername/passwordが一致しているか確認
一致させた上で、以前のdbを削除し、再度ビルドすることで新しいusername/passwordを登録する
- volume mountをしている場合
- docker container , image, volumeの中でpostgresqlを含むものを全て削除する
- bind mountをしている場合
- ホストの該当ディレクトリを削除する
./tmp/db:/var/lib/postgresql/dataであれば、/tmp/dbを削除
- volume mountをしている場合
エラー③ 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の実行ユーザーの権限で読み込めずにパーミッションエラーになっている
参考:
エラー④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