nozominozonozo
@nozominozonozo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Docker × Ruby × MySQLの環境構築】rails newコマンドのエラーを解決したいです。

解決したいこと

【Docker / Ruby / MySQL】にて環境構築を行なっています。
以下コマンドを実行した際に表示されるエラーを解決したいです。

Docker:20.10.5
Docker-compose:1.29.0
Ruby:2.6.5
Rails:6.0.3.6
MySQL:5.6.50

発生している問題・エラー文

standard_init_linux.go:219: exec user process caused: exec format error
ERROR: 1

rails new コマンド

docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --webpacker
Pulling db (mysql:5.6.50)...
5.6.50: Pulling from library/mysql
8aff230071c9: Pull complete
134fc34c9927: Pull complete
27dfb473d52e: Pull complete
702c333a167e: Pull complete
699bc078b452: Pull complete
01dd862365bd: Pull complete
7dbfc4425b5a: Pull complete
a48cbe0a83dc: Pull complete
191adddbb24b: Pull complete
e2b887ee6e99: Pull complete
0f676c0b559f: Pull complete
Digest: sha256:427635d7f0e3be6f5e085728da4e9d8e657130d941e3b0f261a1916cf5741810
Status: Downloaded newer image for mysql:5.6.50
Creating original_app_web_run ... done
standard_init_linux.go:219: exec user process caused: exec format error
ERROR: 1

ソースコード

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:5.6.50
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3316:3306'
    volumes:
      - ./db/mysql/volumes:/var/lib/mysql


  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

entrypoint.sh

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"       

Dockerfile

FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]              

Gemfile

souce 'https://rubygems.org'
gem 'rails', '~>6'

Gemfile.lock

記述無し

自分で試したこと

各versionの確認、またentrypoint.shファイルの最初のコメントアウトを削除していたので再度記述、また再起動を行なってみたがエラーは解決できせんでした。

0

2Answer

おそらく entrypoint.sh が実行できていないのではないかと思います。
以下の観点で確認してみたらいかがでしょうか?

  • 改行コードは正しいですか?
  • ファイルの先頭にBOMが付いていませんか?
  • (これは多分問題ないと思うけど)コンテナのイメージ内に /bin/bash はありますか?

テキストエディタで、BOMの有無や改行コードがわかるならそれで確認してもいいですが、可能ならバイナリエディタ(Linux/Unix なら od コマンドでも可)で内容を確認してファイルの先頭が正しいか確認してもよいと思います。

ファイルの先頭2バイトが16進数で 23 21 (文字でいえば #! )である必要があります。
(BOM が付いていると、先頭が ef bb bf になります。先頭は改行コードやスペースなどでもダメです)

また、改行が 0a0d 0a ではだめ)である必要があります。

image.png

0Like

Comments

  1. @nozominozonozo

    Questioner

    @yoshi389111さん
    ご回答ありがとうございます。
    上記観点を確認したところentrypoint.shの1行目が改行されていました。
    修正後、再度rails newを行いましたがエラーは変わらずでした。
    その他2つは問題ありませんでした。

    entrypoint.shを実行させるために引っかかる点が他にありますでしょうか?
  2. 他に思いつくことはありません。

    (どのようにしてBOMがないことを確認したのかわかりませんが)念のため、ファイル先頭に BOM やスペース、その他の見えない制御コードなどがないかを、バイナリエディタか、od コマンドなどで再確認するぐらいですね。

Gemfile がTYPO してるのはどうでもいいですが,自分でも上記ソースをコピーして試してみましたが,
普通に実行できてしまいました.

例えばローカルとイメージ内の内容に差分があるかもしれませんので,一度イメージを作り直して実行してみてもいいかもしれません.

0Like

Comments

  1. @nozominozonozo

    Questioner

    @atm-snagさん
    ご回答ありがとうございます。
    時間を空けて再度実行すると上手くいきました。
    あれほど上手くいっていなかったのに不思議です。
    ただ新たにMySQLとのエラーが発生しました。
    新たな質問項目を作りますのでアドバイスいただけると幸いです。
    ありがとうございました。
  2. 解決したなら良かったです

Your answer might help someone💌