LoginSignup
133
81

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-05

概要

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をすることができます。

参考

133
81
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
133
81