Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why my docker-compose build is failing when copying files

I have a project that is running just fine using fastAPI (main.py). Now I want to share it as a docker image. Here is what I am doing:

My project has this structure:

project
│  docker-compose.yaml 
|  requirements.txt  
│
└───<dir>services   
   │
   └───<dir>api
   |      │   Dockerfile
   |      │   main.py
   |      |
   |       <dir>model
   |          file.model
   |          file.model
   └───<dir>statspy  
            file.dev.toml
            file.prod.toml

My Dockerfile:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

FROM python:3.10

RUN pip install fastapi uvicorn transformers

COPY . /api /api/api

ENV PYTHONPATH=/api
WORKDIR /api

EXPOSE 8000

ENTRYPOINT ["uvicorn"]
CMD ["api.main:app", "--host", "0.0.0.0"]

docker_compose.yaml

version: "3"

services:
  docker_model:
    build: ./services/api
    ports:
      - 8000:8000
    labels:
      - "statspy.enable=true"
      - "statspy.http.routers.fastapi.rule=Host(`fastapi.localhost`)"

  topic_v5:
    image: statspy:v5.0
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "$PWD/services/statspy/statspy.dev.toml:/etc/statspy/statpys.toml"

when I run docker-compose build it fails with this error message:

Step 3/8 : COPY ./api /api/api
COPY failed: file not found in build context or excluded by .dockerignore: stat api: file does not exist

What am I doing wrong here?

>Solution :

Your build context in the docker-compose file is build: ./services/api

project
│  docker-compose.yaml 
|  requirements.txt  
│
└───<dir>services   
   │
   └───<dir>api  <--- docker_model Dockerfile executes from here
   |      │   Dockerfile
   |      │   main.py
   |      |
   |       <dir>model
   |          file.model
   |          file.model
   └───<dir>statspy  
            file.dev.toml
            file.prod.toml

You later try to do COPY ./api /api/api. There is no api dir in /services/api, so the COPY directive fails.

What you probably want to do instead is COPY . /api. The rest of the Dockerfile looks correct.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading