【備忘録】docker-composeのbuildでcontextを利用する場合はファイルのパスに注意する

なんとまた備忘録での投稿です。

 

今回はdocker-composeを利する際の注意点です。

 

▼起こったこと

docker build でファイルが存在するにも関わず file not found になる

 

▼原因

docker-compose.yml の build で context を利用した場合は、Dockerファイル内でもそこから見たパスを記載する必要がある

※自分でも何を書いているかわからなくなってきました、、、

 

▼具体例

・ディレクトリツリー
root
├── README.txt
├── docker-compose.yml
├── httpd
│ ├── Dockerfile
│ └── conf
      ├── httpd.conf

 

・docker-compose.yml
version: "3.9"
services:
  test-web01:
    build:
      context: ./
      dockerfile: httpd/Dockerfile
    container_name: test-web01
    ports:
      - "80:80"

→context で ./ を指定しており、docker-compose.yml ファイルが配置されているディレクトリがルートディレクトリとなるので、
Dockerfileも httd directoryから指定する必要がある
すなわち、./ Dockerfile で指定してしまうと、Dockerfileのパスが docker-compose.yml/Dockerfile となり、エラーになる

・Dockerfile
FROM httpd:2.4
#デフォルトのconfファイルを上書き
COPY httpd/conf/httpd.conf /usr/local/apache2/conf/httpd.conf ★
#ポート開放
EXPOSE 80

→こちらも context で ./ を指定している関係上、docker-compose.yml ファイルを配置しているディレクトリをルートディレクトリとして、http ディレクトリからパスを指定する必要がある

これで何時間もはまりながら、今一度dockerのおもしろさと難しさがわかりました、、、