TL; DR
запустите его из корневого каталога:
docker build . -f ./path/to/dockerfile
длинный ответ:
в dockerfile вы не можете подняться.
почему
когда демон docker создает ваш образ, он использует 2 параметра:
контекст - это то, что вы называете .
в файле Docker. (например как COPY . /app
)
оба они влияют на окончательное изображение - файл Docker определяет , что произойдет. контекст сообщает docker для , какие файлы должны выполнять операции, указанные в этом файле Docker.
вот как это написано в документах:
Контекст сборки - это набор файлов, расположенных в
указанный путь или URL. Процесс сборки может ссылаться на любой из файлов
в контексте. Например, ваша сборка может использовать инструкцию COPY для
ссылка на файл в контексте.
так, обычно контекст - это каталог, в котором находится Dockerfile. Мое предложение состоит в том, чтобы оставить это, где это принадлежит. Назовите ваши докер-файлы в честь их роли (Dockerfile.dev
, Dockerfile.prod
и т. д.), и это нормально, если несколько из них находятся в одном каталоге.
контекст еще можно изменить:
в конце концов, именно вы задаете контекст. поскольку команда docker build
принимает контекст и путь к докер-файлу. когда я бегу:
docker build .
Я на самом деле даю ему контекст моего текущего каталога (я пропустил путь dockerfile, поэтому по умолчанию он PATH/Dockerfile
)
поэтому, если у вас есть докер-файл в dockerfiles/Dockerfile.dev
, вы должны поместить себя в каталог, который вы хотите использовать в качестве контекста, и запустить:
docker build . -f dockerfiles/Dockerfile.dev
То же относится и к docker-compose
разделу сборки (вы указываете там контекст и путь к докер-файлу)
надеюсь, что это имело смысл.