はじめに
会社の研修で詰まったところをメモ程度に書いていく
やりたかったこと
以下のようなディレクトリ構造の時、dokerfileから親ディレクトリのindex.htmlをCOPYしたかった
ディレクトリ構造
content/
│
├ .infrastructure/
│ ∟ dockerfile
│
├ files/
∟ index.html
dockerfile
FROM: nginx:latest
COPY: ../files/ /usr/share/nginx/html
WORKDIR /usr/share/nginx/html
これで.infrastructureディレクトリで docker build
を実行。
実行結果
.infrastructure $ docker build . -t docker-html
-- 実行結果 --
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM nginx:latest
---> 9beeba249f3e
Step 2/2 : COPY ../files/ /usr/share/nginx/html
COPY failed: Forbidden path outside the build context: ../files/ ()
このようにCOPY failed: Forbidden path outside the build context: ../files/ ()
と表示され親ディレクトリを参照できない
解決方法
-f オプションを使って、content
ディレクトリからdocker build
コマンドを実行する
以下の通り
# docker build -f [dockerfileの指定] -t [イメージ名] [イメージを作成する時に参照するディレクトリ]
$ docker build -f .infrastructure/dockerfile -t image_name .
注意点
最後の.
忘れないように!
今回の場合はカレントディレクトリからimageを作成するため.
。
まとめ
dockerfileから別のディレクトリのファイルを参照することはできない。
なので、親ディレクトリから-fオプションを用いてコマンドを実行すれば良い。