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

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

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

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

Ruby on Rails

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

Docker

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2674閲覧

AWS上でdocker-composeファイルを指定してプリコンパイルができない

begenner

総合スコア80

docker-compose

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

Ruby on Rails

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

Docker

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2021/08/26 08:15

現在AWSにDocker + Railsアプリをデプロイしようとしています。

【Rails AWS Docker】既存Ruby on Rails + MySQLアプリをDockerで構築し、AWSにデプロイする(6) - Qiitaを参考にして

  1. awsのec2にログイン
  2. ルートユーザーとしてログイン(sudo su -)
  3. git cloneしてアプリをコピー
  4. .envconfig/master.keyファイルをローカルからawsにコピー
  5. docker-compose -f docker-compose.production.yml build
  6. docker network create webapp-network
  7. docker-compose -f docker-compose.production.yml run --rm web rails assets:precompile

という手順で実行していきましたが、コンテナ起動の項目の
docker-compose -f docker-compose.production.yml run --rm web rails assets:precompileを実行してプリコンパイルをしようとしたところ

Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "rails": executable file not found in $PATH: unknown

というエラーが発生してプリコンパイルができません。エラーをググるとdocker環境でのRailsアプリの立ち上げ - Qiita
が似ていると思い、再度実行してみましたがうまくいかず、全くわかりません(ローカルではdocker-compose run --rm web rails assets:precompileは実行できます)
もしわかる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m_ _m)

動作環境

RailsAWS
Ruby: 2.7.3Amazon linux2
Rails: 6.0.3.6nginx: 1.16.1
dotenv-railsを使用EC2、RDS(MySQL)

エラー内容

docker-compose -f docker-compose.production.yml run --rm web rails assets:precompileを実行すると以下のエラーが発生する

Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "rails": executable file not found in $PATH: unknown

期待する動作

docker-compose.production.ymlを使用してAWS内でrailsのプリコンパイルができること

該当しそうなコード(全4ファイル)

AWSの本番環境で使用しているコード

(1/4)Dockerfile.production

Dockerfile

1# Dockerfile.production 2FROM ruby:2.7.3 3 4ENV DEBCONF_NOWARNINGS yes 5ENV LANG C.UTF-8 6ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE yes 7EXPOSE 3000 8 9RUN apt-get update -qq && \ 10 apt-get install -y --no-install-recommends \ 11 build-essential \ 12 libpq-dev \ 13 vim \ 14 nodejs 15 16 17RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 18 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 19 echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 20 apt-get update && apt-get install -y yarn 21 22RUN mkdir /webapp 23WORKDIR /webapp 24ADD Gemfile /webapp/Gemfile 25ADD Gemfile.lock /webapp/Gemfile.lock 26COPY . /webapp 27 28RUN bundle config --local jobs 4 29RUN bundle config set --local path 'vendor/bundle' 30 31RUN gem install bundler -v 2.1.4 && bundle install
(2/4)docker-compose.production.yml

docker

1# docker-compose.production.yml 2version: '3.7' 3 4services: 5 web: 6 build: 7 context: . 8 dockerfile: ./Dockerfile.production 9 command: bundle exec puma -C config/puma.rb -e production 10 environment: 11 RAILS_ENV: production 12 RAILS_SERVE_STATIC_FILES: 'true' 13 networks: 14 - webapp-network 15 volumes: 16 - .:/webapp 17 - public-data:/webapp/public 18 - tmp-data:/webapp/tmp 19 - log-data:/webapp/log 20 - bundle:/usr/local/bundle 21 - node-modules:/webapp/node_modules 22 # 公開ポートの設定(ホスト(Mac側):コンテナ側) 23 ports: 24 - "3000:3000" 25 - "3035:3035" 26 # depends_on: 27 # - db 28 29 nginx: 30 build: 31 context: . 32 dockerfile: ./containers/nginx/Dockerfile 33 volumes: 34 - public-data:/webapp/public 35 - tmp-data:/webapp/tmp 36 networks: 37 - webapp-network 38 ports: 39 - 80:80 40 depends_on: 41 - web 42 43volumes: 44 bundle: 45 driver: local 46 db-data: 47 driver: local 48 node-modules: 49 driver: local 50 public-data: 51 tmp-data: 52 log-data: 53 54networks: 55 webapp-network: 56 external: true

ローカルで使用しているファイル

(3/4)Dockerfile

Dockerfile

1ARG RUBY_VERSION=2.7.3 2FROM ruby:$RUBY_VERSION 3 4ENV APP_DIR /webapp 5ENV BUNDLER_VERSION 2.1.4 6ENV LANG C.UTF-8 7ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE yes 8ENV DEBCONF_NOWARNINGS yes 9EXPOSE 3000 10 11# Node.js 12RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash - 13 14RUN apt-get update -qq && \ 15 apt-get install -y --no-install-recommends \ 16 build-essential \ 17 libpq-dev \ 18 vim \ 19 nodejs 20 21# yarn 22RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 23 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 24 echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 25 apt-get update && apt-get install -y yarn 26 27RUN mkdir $APP_DIR 28WORKDIR $APP_DIR 29ADD Gemfile Gemfile 30ADD Gemfile.lock Gemfile.lock 31# COPY . $APP_DIR 32 33RUN bundle config --local jobs 4 34RUN bundle config set --local path 'vendor/bundle' 35 36# RUN gem install bundler -v ${BUNDLER_VERSION} && \ 37# bundle install 38
(4/4)docker-compose.yml

docker

1# docker-compose.yml 2version: "3.7" 3 4services: 5 db: 6 image: mysql:5.7 7 environment: 8 MYSQL_ROOT_PASSWORD: password 9 MYSQL_DATABASE: root 10 ports: 11 - "4306:3306" 12 volumes: 13 - db-data:/var/lib/mysql 14 web: 15 init: true 16 tty: true 17 stdin_open: true 18 build: . 19 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 20 volumes: 21 - .:/webapp 22 - bundle:/usr/local/bundle 23 - node-modules:/webapp/node_modules 24 ports: 25 - "3000:3000" 26 - "3035:3035" 27 links: 28 - db 29 environment: 30 RAILS_ENV: development 31 32volumes: 33 db-data: 34 driver: local 35 bundle: 36 driver: local 37 node-modules: 38 driver: local 39

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

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

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

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

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

yu_1985

2021/08/26 11:13

ローカルとproductionでDockerfileもdocker-compose.ymlも内容がだいぶ異なるのでローカルで動いたことはあまり参考にならなそうに思えます。 エラーを見るとrailsコマンドのパスが通ってないのでは。 docker-compose -f docker-compose.production.yml run --rm web bundle exec rails assets:precompile みたいにするとどうなりますか
begenner

2021/08/26 12:11

ご回答いただきありがとうございます。 教えていただいたコマンドを実行するとエラー内容が変わって bundler: command not found: rails Install missing gem executables with `bundle install` とエラーが表示されました。 docker-compose -f docker-compose.production.yml run --rm web bundle install を実行して再度 docker-compose -f docker-compose.production.yml run --rm web bundle exec rails assets:precompile を実行するととりあえずコンパイルされるようになりました。 Dockerfile.productionには最後の行に RUN gem install bundler -v 2.1.4 && bundle install と記述してあるので、上記のような新しいエラーは出ないような気がするのですが、 RUN gem install bundler -v 2.1.4 && bundle install は意味がないような状態なのでしょうか?
yu_1985

2021/08/26 12:38

ビルドはうまくいってるんでしょうか?
begenner

2021/08/26 12:44

ビルドはとりあえず問題なくできるようになりました。
yu_1985

2021/08/27 07:14

ということはそれまで問題があったということでしょうか…? docker-compose upでコンテナを立ち上げた後、コンテナのシェルを起動して中がどうなっているかを確認してみてはどうでしょう。
begenner

2021/08/28 07:15

> ということはそれまで問題があったということでしょうか…? 返事が遅くなり申し訳ありません、ビルド自体は問題なくできていました。 現在は教えていただいた内容でプリコンパイルのコマンドは問題なく動作していますので、いったんクローズさせていただきます。 お忙しい中ありがとうございました!!
guest

回答1

0

自己解決

gemがインストールされていませんでした。
docker-compose -f docker-compose.production.yml run --rm web bundle installを実行してgemをインストールし

yu_1985 さんに教えていただいたとおり、
docker-compose -f docker-compose.production.yml run --rm web bundle exec rails assets:precompile
を実行することでプリコンパイルができました。

投稿2021/08/28 07:18

begenner

総合スコア80

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問