現在AWSにDocker + Railsアプリをデプロイしようとしています。
【Rails AWS Docker】既存Ruby on Rails + MySQLアプリをDockerで構築し、AWSにデプロイする(6) - Qiitaを参考にして
- awsのec2にログイン
- ルートユーザーとしてログイン(sudo su -)
- git cloneしてアプリをコピー
.env
、config/master.key
ファイルをローカルからawsにコピーdocker-compose -f docker-compose.production.yml build
docker network create webapp-network
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)
動作環境
Rails | AWS |
---|---|
Ruby: 2.7.3 | Amazon linux2 |
Rails: 6.0.3.6 | nginx: 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
回答1件
あなたの回答
tips
プレビュー