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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

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

Q&A

解決済

1回答

8833閲覧

docker buildするとno source files were specifiedエラーが発生

sandbox0621

総合スコア1

Docker

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

0グッド

0クリップ

投稿2020/06/05 11:30

前提・実現したいこと

ECRにPUSHするためにローカルでdocker buildする際に表題のエラーが発生しました。
docker-compose up -dではエラーは発生していません。

発生している問題・エラーメッセージ

Step 1/11 : FROM ruby:2.6.3-alpine ---> 6ddb199f039f Step 2/11 : ARG RAILS_ENV ---> Using cache ---> cd7ab33d42b9 Step 3/11 : ENV ROOT_PATH /navi-biz-api/ ---> Using cache ---> 85c716416d4b Step 4/11 : ENV LANG C.UTF-8 ---> Using cache ---> 76855d68016c Step 5/11 : ENV PORT 80 ---> Using cache ---> 6ae850dd5c76 Step 6/11 : COPY Gemfile* $ROOT_PATH COPY failed: no source files were specified

該当のソースコード

フォルダ構成

├── /docker/rails/Dockerfile ├──docker-compose.yml ├──Gemfile ├──Gemfile.lock

実行のコマンド

※アプリケーションディレクトリで実行 docker build -t navi-biz/api ./docker/rails/

Dockerfile

FROM ruby:2.6.3-alpine ARG RAILS_ENV ENV ROOT_PATH /navi-biz-api/ ENV LANG C.UTF-8 ENV PORT 80 COPY Gemfile* $ROOT_PATH WORKDIR $ROOT_PATH RUN apk upgrade --no-cache && \ apk update && apk add git && \ apk add --update --no-cache --virtual=build-dependencies \ postgresql-dev \ build-base \ curl-dev \ linux-headers \ libxml2-dev \ libxslt-dev \ ruby-dev \ yaml-dev \ zlib-dev && \ apk add --update --no-cache \ bash \ ruby-json \ tzdata \ nodejs \ postgresql \ yaml && \ gem install bundler -v '2.0.2' && \ bundle install -j4 && \ rm -rf /usr/local/bundle/cache/*.gem COPY . $ROOT_PATH ENV SECRET_KEY_BASE RUN ["bundle", "exec", "rake", "secret"] CMD rm -f tmp/pids/unicorn.pid && \ bundle exec unicorn_rails -E $RAILS_ENV -c config/unicorn.rb -p ${PORT}

docker-compose.yml

version: '3.5' services: app: build: context: . dockerfile: ./docker/rails/Dockerfile volumes: - .:/navi-biz-api - ./tmp:/navi-biz-api/tmp - ./log:/navi-biz-api/log - bundle-data:/usr/local/bundle ports: - 3200:80 networks: - navi-biz depends_on: - db environment: RUBYOPT: -EUTF-8 DATABASE_USER: postgres DATABASE_PASSWORD: password DATABASE_HOST: db DATABASE_HOST_RO: db RAILS_ENV: development stdin_open: true tty: true db: build: context: . dockerfile: ./docker/postgres/Dockerfile ports: - 25432:5432 networks: - navi-biz environment: POSTGRES_PASSWORD: password POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C" volumes: - ./docker/postgres/init.sh:/docker-entrypoint-initdb.d/init.sh - ./db-data:/var/lib/postgresql/data - ./tmp:/tmp networks: navi-biz: name: navi-biz-network volumes: bundle-data: tmp: log: db-data: es_tour_data:

試したこと

コマンド実行のディレクトリをDockerfileと同一位置にしてみたりしましたがうまくいきませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

DockerfileのCOPYは、コンテキストからファイルをコピーします。
コンテキストはdocker buildの一番最後に指定したパスです。質問の場合は./docker/rails/ です。
そのディレクトリにはGemfile*は存在しないのでエラーになります。

docker-composeではcontext: .なのでGemfileが見つかります。

docker buildで同じようにするなら
docker build -f ./docker/rails/Dockerfile .
となります。

ただ、Dockerfileがあるディレクトリがコンテキストになるように構成するのが、混乱も少なくて一般的かと思います。
そうするにはGemfile等をDockerfileと同じディレクトリにおいて、実行するコマンドは質問のと同じになります。

投稿2020/06/06 01:53

bsdfan

総合スコア4567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問