Возникает ошибка при сборке 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 шт):
есть пару замечаний:
- при указании
WORKDIR
в Dockerfile Вам не нужно указывать абсолютный путь для командADD
иCOPY
. КомандаWORKDIR
работает какcd
в терминале. Например, этого будет достаточно:
WORKDIR /server
COPY ./server/server.py . # команда не совсем корректная. ниже объясню почему
- 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 для копирования можно указывать несколько файлов сразу