質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

1848閲覧

nginxを導入すると、buildは通るがdocker-compose upでdocker-entrypoint.sh: 38: exec: bundle: not foundのエラーが表示されます。

tenlife

総合スコア70

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/06/02 01:24

編集2021/06/02 20:49

docker初心者です

dockerでrails6/nginx/vue.js/mysqlでアプリケーションの立ち上げを行なっています。

現状
nginxを導入し、docker-compose up --buildをする部分で下記のエラーが表示されています。
導入する以前はエラーは出ませんでした。

error

1docker-entrypoint.sh: 38: exec: bundle: not found

nginxの導入で行ったこと
・nginxフォルダーの作成、Dockerfile,nginx.confファイルの作成、編集
・docker-compose.ymlの書き換え
・entrypoint.shファイル作成、編集
・api(rails)のdockerfileの編集

試したこと
・apiのdockerfileでRUN gem install bundlerを追加
・upではなく、build出来るか確認。docker-compose buildは通ること確認

dockercompose

1 2version: '3' 3 4services: 5 web: 6 build: 7 context: . 8 dockerfile: nginx/Dockerfile 9 command: bundle exec rails s -p 5000 -b '0.0.0.0' 10 ports: 11 - '5000:5000' 12 depends_on: 13 - db 14 volumes: 15 - ./api:/app 16 - bundle:/usr/local/bundle 17 tty: true 18 stdin_open: true 19 db: 20 image: mysql:5.7 21 volumes: 22 - mysql_data:/var/lib/mysql/ 23 environment: 24 MYSQL_ROOT_PASSWORD: password 25 ports: 26 - '3306:3306' 27 front: 28 build: ./front 29 volumes: 30 - ./front:/app 31 ports: 32 - '8888:8888' 33 tty: true 34 stdin_open: true 35 command: npm run serve 36 37volumes: 38 mysql_data: 39 bundle:

entrypoint

1#!/bin/bash 2set -e 3rm -f /api/app/tmp/pids/server.pid 4exec "$@"

Dockerfile

1#nginx 2FROM nginx:1.20.1 3 4ENV TZ Asia/Tokyo 5RUN echo "${TZ}" > /etc/timezone 6 7RUN rm -f /etc/nginx/conf.d/* 8 9ADD nginx/nginx.conf /etc/nginx/conf.d/nginx.conf 10 11CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf 12

conf

1#nginx.conf 2 3upstream webapp { 4 # ソケット通信したいのでpuma.sockを指定 5 server unix:///app/tmp/sockets/puma.sock; 6} 7 8server { 9 listen 80; 10 # ドメインもしくはIPを指定 11 server_name localhost; 12 13 access_log /var/log/nginx/access.log; 14 error_log /var/log/nginx/error.log; 15 16 # ドキュメントルートの指定 17 root /webapp/public; 18 19 client_max_body_size 100m; 20 error_page 404 /404.html; 21 error_page 505 502 503 504 /500.html; 22 try_files $uri/index.html $uri @app; 23 keepalive_timeout 5; 24 25 # リバースプロキシ関連の設定 26 location @app { 27 proxy_set_header X-Real-IP $remote_addr; 28 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 29 proxy_set_header Host $http_host; 30 proxy_pass http://app; 31 } 32}

Dockerfile

1#api 2FROM ruby:3.0.1 3 4RUN apt-get update -qq && \ 5 apt-get install -y build-essential \ 6 libpq-dev \ 7 nodejs \ 8 && rm -rf /var/lib/apt/lists/* 9 10RUN mkdir /app 11ENV APP_ROOT /app 12WORKDIR $APP_ROOT 13 14ADD ./Gemfile $APP_ROOT/Gemfile 15ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock 16RUN bundle install 17 18ADD . /app 19 20# Add a script to be executed every time the container starts. 21COPY entrypoint.sh /usr/bin/ 22RUN chmod +x /usr/bin/entrypoint.sh 23VOLUME /app/tmp 24ENTRYPOINT ["entrypoint.sh"] 25EXPOSE 5000

参考サイト

どなたか知見のある方、もしくは記載されているサイトを知っている方居ましたらご教授いただきたいです。
よろしくお願いします。

追記

docker-composeのbuildの部分を変更前の記述に戻すと正しくupが通るようになります。
build時のnginxの指定がおかしいのでしょうか。

dockercompose

1変更前 2version: '3' 3services: 4 web: 5 build: ./api 6 7変更後 8version: '3' 9services: 10 web: 11 build: 12 context: . 13 dockerfile: nginx/Dockerfile

追記2

ディレクトリ構成
api,front,nginxにそれぞれDockerfileがあります。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/06/02 02:57

nginxが原因のエラーには見えませんが、nginx導入するまでは動いてたんですか?
tenlife

2021/06/02 03:58

nginxを導入すまでは正しく動いていました。 具体的には追記しましたdockercomposeファイルの変更を加えるとエラーになります。 私の理解としてはbuildを追加したnginxを呼び出すコードだと理解しています。こちらは問題ないでしょうか。
yukky1201

2021/06/02 04:54

エラーメッセージや提示のコードは正確でしょうか? エラーメッセージ:docker-entrypoint.sh Dockerfile内記述:entrypoint.sh とファイル名が合致していないことが気になりました
tenlife

2021/06/02 05:10 編集

正確だと思います。 >エラーメッセージ:docker-entrypoint.sh  Dockerfile内記述:entrypoint.sh 私も少し違和感でした。nginxを導入するまではそもそもentrypoint.shファイルも作成せずに通っていました。ちなみにファイル名をdocker-entrypoint.shに変更して実行してもエラーは変わらずでした
hentaiman

2021/06/02 05:17

ディレクトリ構成分からないので想像で書きますが、元々はwebにrubyコンテナ呼ぼうとしていたのがnginxのコンテナになってるんですよね?で、なぜか分かりませんけどnginxのコンテナでbundle使おうとしていると で、そりゃあnginxにbundleあるわけないでしょうっていうエラーに至ってるように思えますね frontに指定しているものが何かも質問の内容からは分かりませんし 全容が見えないので何とも言えませんが、中途半端に書き換えるのではなくひとつひとつコンテナを用意していく事を意識して作った方がよろしいかと思われます
kiino

2021/06/02 19:49 編集

> ・entrypoint.shファイル作成、編集 とありますが、 entrypoint.sh の中身を教えてください ソースコードとして記載していただけると嬉しいです 参考サイト内にも entrypoint.sh については記載されていないように見えたので、 可能であれば教えていただきたいです。 (参考サイトの内容と質問者様の docker-compose の内容が違うのが気になっているのですが、ひとまず entrypoint.sh の内容を確認させていただければと思います)
tenlife

2021/06/02 20:31

kenyoさん コメントありがとうございます。 entrypoint.sh の中身ですがソースコードの2つ目の部分に記載しています。 そちらをご確認いただければと思います。 よろしくお願いします。
kiino

2021/06/02 20:39

ご回答ありがとうございます。 「entrypoint」となっているのがそれですね、 認識できておりませんでした。申し訳ございません。 であれば、シェバン行がないようですが、こちら問題ないでしょうか?(省略されただけ?) こちらのスクリプトの内容を参考にされたものがあれば教えていただけませんでしょうか。 五月雨の質問で申し訳ございませんがよろしくお願いいたします。
tenlife

2021/06/02 21:01

Kenyoさん >> (参考サイトの内容と質問者様の docker-compose の内容が違うのが気になっているのですが、ひとま ず entrypoint.sh の内容を確認させていただければと思います) 上記頂いたコメントを参考に、docker-composeにappの設定、webの変更を加えたところコマンドが通るようになりました。盲点でした。もし余裕がありましたら、解答でおかしなところがあれば教えていただきたく思っています。 コメントありがとうございました。
kiino

2021/06/03 16:00

コメントありがとうございます。 参考サイトのURLもありがとうございます。 確認しました。やりたかったことなど、理解が深まりました。 回答の方も見させていただきました。 使用したコンテナの Dockerfile を使用して起動するように回収されたいるようにみえましたので、 問題ないかと思われます。 修正ありがとうございました。 あと、kenyo じゃないですw(すごく気になってしまいました
guest

回答2

0

解決されたようでなによりです。
すでに解決されてますが、エラーの原因が質問だったかと思うのですが
気になったところがあったので回答にて記載させていただきます。

nginxを導入し、docker-compose up --buildをする部分で下記のエラーが表示されています。
導入する以前はエラーは出ませんでした。

docker-entrypoint.sh: 38: exec: bundle: not found

docker-compose.yaml で定義した(ruby, rails用の)bundle コマンドを、
誤って nginx の docker 上で、実行することになってしまい、
nginx のコンテナにある docker-entrypoint.sh に渡った時にエラーになってしまったからかと思います。

質問者様は起票時当初は docker-compose.yaml を以下のように書かれていたと思います。
※ services 部分抜粋

services: web: build: context: . dockerfile: nginx/Dockerfile command: bundle exec rails s -p 5000 -b '0.0.0.0'

この内容としては以下

  • 使うコンテナは nginx/Dockerfile から build したものを使う(nginx のカスタマイズコンテナ)
  • 起動時のコマンドに bundle exec rails s -p 5000 -b '0.0.0.0' を使う

試行錯誤でこの形になったのだと思うのですが、
本来 ruby コンテナ上で bundle コマンドを実行しようとしていたのが、
nginx のコンテナで bundle コマンドを実行する形になっています。

nginx の起動時に、docker-hub に挙げられたコンテナでは、
もともと docker-entrypoint.sh を使うようになっているようです
https://github.com/nginxinc/docker-nginx/blob/master/stable/alpine/Dockerfile#L119

この docker-entrypoint.sh は以下の通りで、与えられたコマンドを38行目で実行しようとしています。
https://github.com/nginxinc/docker-nginx/blob/master/stable/alpine/docker-entrypoint.sh#L38

nginx コンテナ上では bundle コマンドが存在しておらず、
シェルスクリプト上で実行した際にコマンドみつからずにエラーになっていたのが、
出力されたエラーの原因かと思われます。

すでにご自身で回答されたように、rails 用の ruby コンテナをつかって rails の実行をするようにしてあげると
期待動作になりうるかと思われます

投稿2021/06/03 16:00

kiino

総合スコア539

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tenlife

2021/06/03 20:31

Keynoさん回答ありがとうございます!! 自分の回答であやふやな部分がスッキリしました。 丁寧な回答本当にありがとうございます。とても勉強になります。 名前の件、失礼しました。
guest

0

自己解決

これが正しい記載なのかは分かりませんが、立ち上げる事はできました。
結論 dockercomposeファイルにapp部分の記載を追加した。

理解としては
appでrails,webでnginx,frontでvue.js,dbでmysqlをそれぞれ立ち上げている。という認識でいます。

dockercompose

1 app: 2 build: ./api 3 command: bundle exec rails s -p 5000 -b '0.0.0.0' 4 ports: 5 - '5000:5000' 6 depends_on: 7 - db 8 volumes: 9 - ./api:/app 10 - bundle:/usr/local/bundle 11 tty: true 12 stdin_open: true 13 web: 14 build: 15 context: . 16 dockerfile: nginx/Dockerfile 17 ports: 18 - 80:80 19 depends_on: 20 - app

上記で全て立ち上がるようにはなりました。
今回はnginxを導入したけど、その呼び出し方でエラーになっていたのかなと思います。

おかしいところがありましたら、教えていただけると幸いです。

投稿2021/06/02 20:57

tenlife

総合スコア70

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問