Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

docker-composeでADDやCOPYをする際に注意すること

More than 1 year has passed since last update.

概要

docker-composeを利用してADDやCOPYを行いたいときに気をつけることをメモします。

まず、docker-composeでホスト側のファイルをコンテナにマウントする際はDockerfileを利用します。
しかしながら、その際には以下の点に気を付けなければいけません。

これらを踏まえて、AddやCopyをする流れを説明しようと思います。

ここでの例は以下のディレクトリ構成で説明を行います。

$ tree
.
├── docker-compose.yml
├── test
|   └── Dockerfile
└── hogehoge

ホストの絶対パスを指定してしまうとダメ

これは先のブログでも紹介をされているので、簡単な説明にとどめますが、絶対パスを指定すると以下のようなエラーメッセージが出てきます。

ERROR: Service 'test' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builderXXXXX/hogehoge: no such file or directory

そのため、以下のように相対パスを指定してみます。

※注意※これは間違っている例です
COPY ../hogehoge /tmp

しかし、これでも問題が続きます。

現在のコンテキストよりも外部のファイルにアクセスできない

しかし、このようにすると、以下のメッセージが出てきます。

ERROR: Service 'test' failed to build: COPY failed: Forbidden path outside the build context: ../hogehoge

これは、現在のビルド対象の場所よりも外側のファイルを参照しようとすると発生します。この例では、../hogehogeを参照していることが原因です。そのため、ビルドコンテキストを変更する必要があるので、以下のようにdocker-compose.ymlを修正します。

docker-compose.yml
build:
    context: .
    dockerfile: ./php/Dockerfile

このように指定をすると、ビルドコンテキストは、phpディレクトリではなく、docker-compose.ymlの階層が現在のビルドコンテキストになります。そして、ビルドコンテキストがdocker-compose.ymlの階層になったため、コピーしたいファイルhogehogeの相対パスも変わりますので、dockerfileを修正します。

これでOK
COPY ./hogehoge /tmp

これで、コンテキストにあったファイルのADDとCOPYをすることができます。

参考

mk-tool
舞浜のエンジニア
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away