いつも大変お世話になっております。
現在初めてRailsをDockerで始めてみようと思い、
以下のUdemyのチュートリアルを進めています。
チュートリアル通りに進めているのですが、
コマンドdocker-compose build
を行うと以下のエラーが発生します。
エラー内容
➜ pra_ruby git:(main) ✗ docker-compose run --rm api [+] Running 1/0 ⠿ Container pra_ruby-db-1 Running 0.0s [+] Building 2.0s (9/10) => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 542B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ruby:2.7.2-alpine 0.9s => [1/6] FROM docker.io/library/ruby:2.7.2-alpine@sha256:c052b6b5daf7bf467a2ad3368e29ead4ebfb04f2b25b45cbf32a4a4c5f8ee362 0.0s => [internal] load build context 0.1s => => transferring context: 57.55kB 0.1s => CACHED [2/6] WORKDIR /app 0.0s => CACHED [3/6] COPY Gemfile* . 0.0s => CACHED [4/6] RUN apk update && apk upgrade && apk add --no-cache nodejs tzdata postgresql-dev postgresql git && apk add --virtual build-dependencies --no-cache build-base curl-dev && apk del build-dependencies 0.0s => ERROR [5/6] RUN bundle install 0.8s ------ > [5/6] RUN bundle install: #9 0.746 Could not locate Gemfile ------ failed to solve: rpc error: code = Unknown desc = executor failed running [/bin/sh -c bundle install]: exit code: 10
調べたところ api/Dockerfile のRUN bundle install
でエラーが発生しているようです。
「Gemfileが見つからないというエラー」と言うことはわかるのですが、
具体的にソースコードをどのように修正すれば良いかがわかりません。
どなたかどのように修正をすれば良いかご教授いただけますと幸いです。
それではどうぞ宜しくお願い致します。
ディレクトリ構造
. ├── api │ ├── Dockerfile │ ├── Gemfile │ └── Gemfile.lock ├── docker-compose.yml └── front └── Dockerfile
docker-compose.yml
# composeファイルのバージョン指定 # Doc: https://docs.docker.com/compose/compose-file/compose-versioning/ version: "3.8" services: # サービス(=コンテナ) db: image: postgres:13.1-alpine # ベースイメージ定義 environment: # コンテナ環境変数 TZ: UTC # OSのタイムゾーン PGTZ: UTC # postgresののタイムゾーン POSTGRES_PASSWORD: $POSTGRES_PASSWORD # db passwd # ホスト側の(任意の)ディレクトリとコンテナのディレクトリをバインド # 書き方: volumes: ホストパス(絶対or相対パス):コンテナパス(絶対パス) volumes: - "./api/tmp/db:/var/lib/postgresql/data" # ymlファイルは「:」を時間として認識するので、""で囲う。 api: build: #ベースイメージとなるDockerfileを指定 / Dockerfileを使うのでimagesではなくbuildを利用 context: . dockerfile: ./api/Dockerfile args: # Dockerfileに渡す変数 WORKDIR: $WORKDIR environment: # コンテナに渡す変数 POSTGRES_PASSWORD: $POSTGRES_PASSWORD volumes: - "./api:/$WORKDIR" # api/以下のフォルダの内容をバインド depends_on: # サービスの依存関係(=起動の順番), 起動順 => 1: db, 2: api - db ports: # 公開したいポート番号:コンテナポート(Railsはデフォルトポートが3000) - "$API_PORT:3000" front: build: context: . dockerfile: ./front/Dockerfile args: WORKDIR: $WORKDIR command: yarn run dev # コンテナで実行し、Nuxtを立ち上げる(heroku用は別ファイルで設定) volumes: - "./front:/$WORKDIR" depends_on: - api # サービスの依存関係(=起動の順番), 起動順 => 1: db, 2: api, 3: front ports: - "$FRONT_PORT:3000"
api/Dockerfile
FROM ruby:2.7.2-alpine ARG WORKDIR ARG RUNTIME_PACKAGES="nodejs tzdata postgresql-dev postgresql git" ARG DEV_PACKAGES="build-base curl-dev" ENV HOME=/${WORKDIR} \ LANG=C.UTF-8 \ TZ=Asia/Tokyo WORKDIR ${HOME} COPY Gemfile* . RUN apk update && \ apk upgrade && \ apk add --no-cache ${RUNTIME_PACKAGES} && \ apk add --virtual build-dependencies --no-cache ${DEV_PACKAGES} && \ apk del build-dependencies RUN bundle install COPY . . CMD ["rails", "server", "-b", "0.0.0.0"]
front/Dockerfile
FROM node:16.13.1-alpine ARG WORKDIR ENV HOME=/${WORKDIR} \ LANG=C.UTF-8 \ TZ=Asia/Tokyo \ HOST=0.0.0.0 WORKDIR ${HOME}
回答1件
あなたの回答
tips
プレビュー