Docker compose can't find named Dockerfile

Viewed 43

my project structure is defined like this (names are just for example):

- docker-compose.yml
- env_files
  - foo.env
- dockerfiles
  -service_1
    -foo.Dockerfile
    -requirements.txt
- code_folder_1
  - ...
- code_folder_2
  - ...

In my docker-compose:

some_service:
    container_name: foo_name
    build:
      context: .
      dockerfile: ./dockerfiles/service_1/foo.Dockerfile
    ports:
      - 80:80
    env_file:
      - ./env_files/foo.env

Dockerfile:

FROM python:3.8-slim

WORKDIR /some_work_dir
COPY ./dockerfiles/intermediary/requirements.txt .

RUN pip3 install --upgrade pip==21.3.1 && \
   pip3 install -r requirements.txt

COPY . . 

EXPOSE 80

And after i run docker compose build in the directory where compose file is located I get this error:

failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount4158855397/Dockerfile: no such file or directory

I really do not understand why this is happening. I need to set context:. because I have multiple folders that I need to COPY inside foo.Dockerfile

Same error was replicated in macOS Monterey 12.5.1 and Ubuntu 18.04.4 LTS (Bionic Beaver)

1 Answers

I solved a similar issue by writing a script like the following:

#!/bin/bash

SCRIPT_PATH=$(readlink -f $(dirname $0))
SCRIPT_PATH=${SCRIPT_PATH} docker-compose -f ${SCRIPT_PATH}/docker-compose.yaml up -d --build $@

And changing the yaml into:

some_service:
    container_name: foo_name
    build:
      context: .
      dockerfile: ${SCRIPT_PATH}/dockerfiles/service_1/foo.Dockerfile
    ports:
      - 80:80
    env_file:
      - ${SCRIPT_PATH}/env_files/foo.env
Related