Dockerfileで親ディレクトリにあるファイルを参照できない問題


現象

├── nginx
|   └── Dockerfile
├── statics
├── Dockerfile
└── docker-compose.yaml

Dockerfileから親ディレクトリにあるファイルを参照しようとしてもできませんでした。

nginx/Dockerfile
FROM nginx
ADD ../statics /var/www/
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
$ docker-compose up --build
Building nginx
Step 1/4 : FROM nginx
 ---> be1f31be9a87
Step 2/4 : ADD statics /var/www/
ERROR: Service 'nginx' failed to build: ADD failed: stat /var/lib/docker/tmp/docker-builder740600385/statics: no such file or directory

ADDで失敗してしまいます。

解決

docker-compose.yamlでcontextを親ディレクトリを含むようにすることで、ファイルを参照できるようになりました。

docker-compose.yaml
version: '3'
services:
  nginx:
#    build: ./nginx
    build: 
      context: .
      dockerfile: ./nginx/Dockerfile
    container_name: proxy
    ports:
      - 80:80
  api:
    build: .
nginx/Dockerfile
FROM nginx
# ADD ../statics /var/www/
ADD statics /var/www/
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]