Dockerでrails newを実行したらexec format errorが出た話

Dockerで環境構築をし、rails newコマンドを実行したところ、exec /usr/bin/entrypoint.sh: exec format errorというエラーが出ました。

初めてみたエラーだったので、備忘録としてまとめます。

バージョン
  • Ruby 3.2.2
  • Rails 7.1.2
記事の信頼性
  • ぼくは独学で未経験から従業員300名以上の自社開発企業へ転職しました。
  • 実務ではVue.jsとRailsを毎日書いています。
  • 初心者や駆け出しエンジニアがつまづくポイントも身をもってよく理解しています。
目次

問題

個人開発で新たなRailsアプリを作ろうと思い、環境構築を始めました。

自分で書いた環境構築の記事に沿って必要なファイルをすべて準備し下記のコマンドを実行したところ、exec /usr/bin/entrypoint.sh: exec format errorとエラーが出てしまいます、、。

$ docker compose run --rm --no-deps web rails new . --force --database=mysql --api

記事を書いたときはたしかに環境構築できたので、原因がわからずハマってしまいました、、。

解決方法

結論として、entrypoint.shファイルの記述の不備が原因でした。

環境構築の記事に書かれていた#!/bin/shの記述は、不要なコメントだと思って削除していたんですが、これを書かないとexec /usr/bin/entrypoint.sh: exec format errorのエラーが発生してしまうんです。

#!/bin/sh  ← この1行が必要だった!

set -e

rm -f /todo-app/tmp/pids/server.pid

exec "$@"

#!/bin/shはただのコメントではなく、Shebang(シバンまたはシェバン)と呼ばれる特別な記号で、スクリプトを実行するためのインタプリタを指定しています。

#!/bin/shと書くとshで、#!/bin/bashと書くとbashで、#!/bin/zshと書くとzshで実行されるようです。

おわりに

雰囲気で環境構築するのは禁物ですね。

技術書が好きなエンジニア向け

あわせて読みたい
「技術書の内容が頭に入らない」を防ぐ5つの読書方法 「技術書の内容が頭に入らない」を防ぐための5つの読書方法を紹介します。最後まで読めば効率よくインプットできるようになります。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

未経験でSESから従業員300名以上の自社開発企業に転職しました。業務や個人開発で直面した問題や、転職・学習の経験を発信していきます。

コメント

コメントする

目次