2025-06-05:DockerでのRails環境構築についてまとめ(修正版)
はじめに
- オンラインプログラミングスクールRUNTEQ受講生向けの記事となっております
- 当記事は「2025-05-20:Ruby on Rails環境構築のためDockerと5日も闘った記録 ( 2 )」の修正版というか、反省版です(?)
- ちなみに前の記事はこちら
- 元々は自分のDocker設定まわりのファイルの中身を載せていました
- が、それを適用したところで別のポイントで躓いてしまうことが発覚
- 他の受講生の皆さんの学習機会を奪いかねない
- 以上2つの点から、内容を全面的に改めることに決めました
前提
-
RUNTEQ受講生で「Rails入門」に取り組んでいる人向け
- 特に、Windowsで開発環境構築する人向け
- WSLとDockerのインストール・セットアップは済んでいるものとします
- Docker Desktopは使用していません
- 導入するとPCが重くなる可能性があるとのことなので、未導入です
使用マシン
- 前記事の執筆後に、スペックが上のマシンを購入しました
- Surface pro7
- Windows 11搭載
- CPU:クアッド コア第 10 世代 Intel® Core™ i7-1065G7 プロセッサ
- メモリ:16 GB LPDDR4x RAM
- ストレージ:SSD 512GB
- グラフィックス:Intel® Iris™ Plus Graphics
目標
Windows11搭載のSurface pro7端末上でWSL2(Ubuntu)を用いてDocker環境を構築し、Ruby on Railsを起動した上で、「Rails入門」のカリキュラムを進められる状態にする
改めて「Rails入門」のDockerでの環境構築についてのまとめ
まず第一に、リモートリポジトリにある元々の設定ファイルの構成はなるべくいじらない方がいいです。
設定ファイルをchatGPTに言われるがままにいじり倒し、魔改造してしまった私の大きな反省点です……。
なお、私の場合 Dockerfile
はいじる必要がなく、docker-compose.yml
の記述を少し変更するだけで、無事に環境構築ができました。
この前提を頭に入れたまま「Rails入門」カリキュラム内の「環境構築方法を見る」ページを参照しながら、以後お付き合いください!
$ docker compose run web bundle install
でインストールに失敗した
躓き1:🌋 エラー内容
- dbコンテナで
exec /usr/local/bundle/bin/bundle: exec format error
が発生
✅ 対処法
-
docker-compose.yml
のwebコンテナ、dbコンテナそれぞれにplatform: linux/amd64
を指定して設定する -
すべてのキャッシュを削除し、クリーンに再構築する
docker compose down --volumes --remove-orphans docker image prune -af docker volume prune -f docker compose build --no-cache
躓き2-1:コンテナを起動するとdbコンテナが即時停止してしまう
🌋 エラー内容
-
$ docker compose up
でコンテナを起動しても、dbコンテナが起動後即停止ししてしまう - エラー文
db-1 | /usr/local/bin/docker-entrypoint.sh: line 94: /usr/sbin/mysqld: cannot execute binary file
🚫 原因
- このエラーは、
mysqld
実行ファイルが 実行可能な形式ではない(format error) ことを示しており、アーキテクチャの不一致が原因である可能性が極めて高い- chatGPTの指摘より
✅ 対処法
mysql:5.7
の一部バージョンにおいて、特定の環境で動作不良を起こすケースがあるため、動作確認がされているバージョンに固定してみる
image: mysql:5.7.43 # docker-compose.ymlでdbコンテナのimageのバージョンを変更
躓き2-2:コンテナを起動するとdbコンテナが即時停止してしまう
🌋 エラー内容
- エラー文
-
/usr/local/bin/docker-entrypoint.sh: line 194: []=1: bad array subscript
- Windows 11 + WSL2 + Ubuntu の環境で MySQLのコンテナが
bad array subscript
で即終了する
- Windows 11 + WSL2 + Ubuntu の環境で MySQLのコンテナが
-
🚫 原因
- MySQL の エントリポイントスクリプトにバグが含まれており、特定の shell 実装との非互換性で起こる問題
- 以下、chatGPTによる指摘
- MySQL:5.7.43のDocker イメージ内の
/usr/local/bin/docker-entrypoint.sh
にバグがある -
bash
ではなくsh
(dash など POSIX 準拠シェル)で解釈された場合、空の配列添字[]=1
によりエラーが出る。 -
2024年以降の一部
mysql:5.7
系でこのバグが報告されている
- MySQL:5.7.43のDocker イメージ内の
✅ 対処法
-
MySQLのバージョンをさらに古い安定版に明示的にダウングレード
-
docker-compose.yml
でMySQLのバージョンを5.7.41
に変更
-
-
以下を実行:
docker compose down --volumes docker rmi mysql:5.7.43 docker pull mysql:5.7.41 docker compose up --build
以上で、無事に環境構築完了まで行けました
この3点が、主に躓いた点でした。アーキテクチャとMySQLのバージョンの問題が解決すれば、教材にあった指示通りに進めることで、カリキュラムを進めるのに問題ない環境が構築できました。
おわりに
相変わらずchatGPTに頼りまくって設定を調整していますが、最低限のdocker-compose.yml
の修正で環境構築ができたため大変感動しました。
私のように迷路に迷い込む人はそうそういないと思いますが、苦い記憶の供養がてら記録を残しておきます。
教訓
- こんがらがったら
git clone
で最初に立ち返って、改めて挑戦してみよう - chatGPTに設定を調整してもらうことは、無駄ではなかった
- 質問して回答を受け取ることを繰り返すうちに、各ファイルの役割や設定の変更の仕方が何となくわかってきた
- 魔改造はよくない!!
Discussion