こんにちは!
今回は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