Как подсказывает larsks в своем комментарии , вам нужен файл в каталоге services/users
.Чтобы понять почему, полезно понимание «контекста».
Docker не строит на клиенте, он не видит ваш текущий каталог или другие файлы в вашей файловой системе.Вместо этого последний аргумент команды сборки передается как контекст сборки.При использовании docker-compose этот контекст по умолчанию соответствует текущему каталогу, который вы часто будете видеть как .
в команде docker build
, но вы можете переопределить это, как вы сделали здесь с ./services/users
в качестве контекста.Когда вы запускаете сборку, самым первым шагом является отправка этого контекста сборки с док-клиента на сервер.Даже когда клиент и сервер находятся на одном и том же хосте (обычное значение по умолчанию, особенно для настольных сред), происходит такой же процесс.Файлы, перечисленные в .dockerignore
, и файлы в родительских каталогах в контексте сборки не отправляются на сервер Docker.
Когда вы запускаете команду COPY
или ADD
, первый аргумент (или все, кромепоследний аргумент (если у вас их несколько) относится к файлам из контекста сборки, а последний аргумент - это целевой файл или каталог внутри изображения.
Поэтому, когда вы собираете эту запись составного файла:
build:
context: ./services/users
dockerfile: Dockerfile-dev
с помощью этой команды COPY:
COPY ./requirements.txt /usr/src/app/requirements.txt
COPY попытается скопировать файл requirements.txt
из контекста сборки, сгенерированного из ./services/users
, то есть ./services/users/requirements.txt
необходимосуществует и не может быть исключен файлом .dockerignore
в ./services/users
.