Dockerで環境構築をし、rails new
コマンドを実行したところ、exec /usr/bin/entrypoint.sh: exec format error
というエラーが出ました。
初めてみたエラーだったので、備忘録としてまとめます。
目次
問題
個人開発で新たな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で実行されるようです。
おわりに
雰囲気で環境構築するのは禁物ですね。
コメント