Возникает ошибка при сборке docker compose

Практикуюсь в написании docker-compose.yaml. Создал директорию dc_test3 и создал в ней еще две: server и client. В сервере лежит index.html с "Hello World!", файл с кодом сервера на питоне и докерфайл с данным кодом:

FROM python

WORKDIR /server/

COPY ./server/server.py /server/

COPY ./server/index.html /server/ 

При сборке docker compose возникает ошибка

=> ERROR [server 4/4] COPY ./server/index.html /server/ 0.0s


[server 4/4] COPY ./server/index.html /server/:


failed to solve: failed to compute cache key: failed to calculate checksum of ref lmy9fbjpe26a5w0ug6iaa7oje::nog5awa09wq2y7ayqse1663wn: "/server/index.html": not found

Проблема решается после указания контекста сборки, но мне интересно почему она вообще возникает, ведь на COPY ./server/server.py /server/ докер не ругается.

Мануал по созданию проекта я брал с этого сайта https://habr.com/ru/companies/ruvds/articles/450312/

Если делать абсолютно точно как там сказано, то ошибки не возникает, но при "самовольности" почему-то это происходит. Хотелось бы знать причину и как это можно исправить без добавления контекста сборки.


Ответы (1 шт):

Автор решения: Август

есть пару замечаний:

  1. при указании WORKDIR в Dockerfile Вам не нужно указывать абсолютный путь для команд ADD и COPY. Команда WORKDIR работает как cd в терминале. Например, этого будет достаточно:
WORKDIR /server

COPY ./server/server.py . # команда не совсем корректная. ниже объясню почему
  1. Dockerfile имеет доступ к файловой системе только на своем уровне и выше. то есть, достать до файлов в родительской директории у Dockerfile нет возможности. как результат, с помощью команды COPY ./server/server.py /server/ Вы пытаетесь взять <project_dir>/server/server/server.py файл, которого не существует, так как поиск этого файла будет начинаться c директории, в которой находится сам Dockerfile.
    Этот код должен работать:
FROM python

WORKDIR /server

COPY ./server.py ./index.html . # в команде COPY для копирования можно указывать несколько файлов сразу
→ Ссылка