Rails × Docker × GitHub Actionsを使ってCI環境を整えていると、以下のようなエラーに直面することがあります。
❌ エラー内容
CI実行時に以下のようなMySQL接続エラーが発生:
Error 115: Can't connect to MySQL server on 'db' (115)
これはRailsがCI環境上でMySQLに接続できていないことを意味しています。原因は複数あるので、段階的に確認していきましょう。
✅ 解決法1:環境変数の不一致をチェック!
.env や compose.yml
、config/database.yml
、.github/workflows/ci.yml
などで使用しているMySQLのパスワードが一致しているか?を確認しましょう。
例:
.env
MYSQL_ROOT_PASSWORD=パスワード
database.yml
# database.yml
password: <%= ENV['MYSQL_ROOT_PASSWORD'] %>
docker-compose.yml
# docker-compose.yml
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ci.yml
# ci.yml
env:
MYSQL_ROOT_PASSWORD: ${{ secrets.MYSQL_ROOT_PASSWORD }}
ci.yml
のMYSQL_ROOT_PASSWORDの値はGitHub Secrets
で登録しておきましょう。
重要: これらは1文字でも違うと接続できません!
✅ 解決法2:環境変数の $ 記述ミスに注意
以下のように、環境変数の記載に $ だけを置いてしまうとエラーになります。
# compose.yml
# ❌ 誤り
MYSQL_ROOT_PASSWORD: $
# ✅ 正しい書き方
MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD
また、.env ファイル側に定義されている値を忘れずに追記しておきましょう。
✅ 解決法3:Dockerのキャッシュを削除する
構成ファイルを修正しても、Dockerが古いキャッシュを使っていると変更が反映されない場合があります。
その場合は、一度キャッシュを破棄してから再ビルドしましょう:
docker-compose down
docker-compose build --no-cache
docker-compose up -d
docker-compose ps # ← 立ち上がってるか確認
特に「一瞬立ち上がってすぐ落ちる」場合は、キャッシュの影響を疑いましょう。
✅ 補足:テストDBのホスト切り替え
config/database.yml
の test:
環境において、CI環境とローカル環境でDBホストを切り替えたいときは以下のように書くと便利です:
# database.yml
test:
host: <%= ENV['DB_HOST'] || 'db' %>
そして、.github/workflows/ci.yml
に以下を追記:
# ci.yml
env:
DB_HOST: 127.0.0.1
こうすることで:
• CI環境では 127.0.0.1 を使用
• ローカルでは db コンテナを使用
という切り替えが自動的に行われます。
📝 まとめ
環境変数の不一致
→.env / compose.yml / database.yml / ci.yml をチェック
$ の書き間違い
→$ENV_NAME 形式で明示的に記述
Dockerキャッシュ
→--no-cache で再ビルドする
ホスト切り替え
→`ENV[‘DB_HOST’]
🔐 セキュリティ面の注意
.envファイルにはパスワード等の機密情報を含むため、.gitignoreに追加してGitHubにアップロードしないように注意しましょう!
# gitignore
.env
🚀 おわりに
CIトラブルは環境差異に起因することが多いです。焦らず一つずつチェックして、確実に動作確認を取っていきましょう!
普段の勉強記録や日々の学びはこちらのはてなブログで投稿しています。
技術の基礎から実践まで、わかりやすくまとめているのでぜひチェックしてみてください!
▶︎はてなブログ:育児パパエンジニアの勉強記録
https://taaa-0991.hatenablog.com/
ご質問・ご指摘があれば、コメントやXでお気軽にどうぞ!
👉[@taaa_099]( https://x.com/taaa_099 )