exec user process caused “exec format error”で少し詰まった

以下のコマンドを入力した時にエラーが出て少しつまづいたのでメモ。

docker-compose run web rails new . --force --no-deps --database=postgresql
エラー内容:
Starting aiueo_db_1 … done
standard_init_linux.go:207: exec user process caused "exec format error"

このエラーはentrypoint.shにshebang(シバン・シェバン)が抜けていたことが原因。
shebangとは、実行時にインタプリタを指定するものである。
一行目に#!/ bin/sh と書いてるのはただのコメントではないので削除してはいけない。

entrypoint.shを修正しても同じエラーが出てしまう場合は、
docker-compose build web
と打った後にもう一度コマンドを入力すると修正が反映される。

entrypoint.sh

#!/bin/bash
set -e

# railsのpidが存在している場合に削除する」処理
rm -f /aiueo/tmp/pids/server.pid

# DockerfileのCMDで渡されたコマンド(→Railsのサーバー起動)を実行
exec "$@"

DockerFile

# ruby2.6.5を使用する
FROM ruby:2.6.5
# インストール可能なパッケージの一覧を更新, -qq: エラー以外は表示しない : nodejsをインストール, -y: 処理中にあわられるプロンプトに対して全てYesと解答
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
# ファイルを作成する
RUN mkdir /aiueo
# 作業ディレクトリを設定する
WORKDIR /aiueo
# ローカルのファイルをコンテナにコピー
COPY Gemfile /aiueo/Gemfile
COPY Gemfile.lock /aiueo/Gemfile.lock
# bundle installを実行
RUN bundle install
# ローカルのファイルをコンテナにコピー
COPY . /aiueo

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
# :chmod +x すべてのユーザーに実行権限を与える, 
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

memo:
1つのDockerFileにCMD,ENTRYPOINTに一度のみ実行する。

以下参考にしたサイト

DockerでRails+Webpackerの開発環境を構築するテンプレート - Qiita
追記(2018/07/07)node バイナリと yarn バイナリのインストールを、nodeの docker image からコピーする方式に改善しました。参考URL: …
404 Page not found

コメント

タイトルとURLをコピーしました