Dockerfileがあるディレクトリから親ディレクトリを参照する
Dockerfile
があるディレクトリから親ディレクトリを参照する際に、詰まったのでメモします。
Dockerfile
をビルドしようとすると、普通Dockerfile
のディレクトリに移動して
docker build -t service .
でビルドできます。しかし、ここで落とし穴があって、このビルド方法の場合、そのディレクトリ内のみにしかアクセスできません。
たとえば以下のようなディレクトリ構成の場合、dist
ディレクトリからビルドするとscript
ディレクトリにはアクセスできません。
project/
Dockerfile
dist/
Dockerfile
test/
Dockerfile
script/
foo
この問題を解決するには、以下のようにdist/Dockerfile
を書き
FROM ubuntu:14.04
COPY script/foo /script/foo
プロジェクトのルートで以下のようにコマンドすることで正常にビルドされます。
docker build -t service-dist -f dist/Dockerfile .
この問題を解決した方法は以下の2つの情報から考えることが出来ます。
Dockerfile
がビルドされる時のカレントディレクトリはdocker build DIR
で指定したDIR
である。Dockerfile
は、-f
オプションでどこからでも読み込むことができる
つまり、ビルドするときのカレントディレクトリは、Dockerfile
のあるディレクトリではなく、build
コマンドで指定したDIR
であると言うことです。したがって、Dockerfileには親ディレクトリから見たパスを書き、ビルド時に指定するDIR
には、親ディレクトリを指定すれば問題が解決できます。
結論
Dockerfile
があるディレクトリから親ディレクトリを参照したい場合、Dockerfile
には親ディレクトリから見たパスを書き、ビルド時に指定するDIR
には、親ディレクトリを指定すれば正常にビルドすることができます。