#docker
#docker
Вопрос:
Если мой проект структурирован:
docker:
==&&t; Dockerfile_1
source_code
В Dockerfile1 у меня есть:
COPY //source_code
Как я могу добавить папку source_code в мой dockerfile. Я продолжаю получать сообщение о том, что:
COPY failed: Forbidden path outside the build context: ../source_code ()
Комментарии:
1. Можете ли вы исправить структуру вашего проекта? Неясно, какова фактическая структура (что такое
//
?). Значение True находится на уровнеsource_code
и затем выполняетсяdocker build --file docker/Dockerfile_1
.2. // означает, что я пытаюсь получить доступ к пути вне моего контекста сборки. Просто отредактировано, поскольку оно было не в том месте
3. Я не знаю
docker
, но обычный способ сказать «FileX из каталога выше» таков../fileX
Ответ №1:
Вы не можете использовать пути вне контекста сборки — это сделано намеренно, чтобы ваш контейнер был полностью указан файлами в этом каталоге.
Обычно вам нужно просто сопоставить Dockerfile с исходным кодом — редко есть причина, по которой он нужен вдали от него.
Другая возможность заключается в нахождении в каталоге вашего исходного кода и использовании docker build -f /path/to/Dockerfile
. Это было бы довольно неудобно в использовании, и, на мой взгляд, я не вижу никакого способа, которым это было бы оправдано, просто поместив Dockerfile в корень вашего проекта.
Комментарии:
1. Спасибо, это имеет смысл
2.
I can't see any way this would be justifiable over just placin& the Dockerfile in your project root.
Я могу — существует вероятность, что вам может потребоваться более одного файла Dockerfile для одного и того же проекта, например, для создания контейнеров с разными базовыми ОС или для разных архитектур. Чаще всего у людей есть один для облегченных сборок Alpine и один для полноразмерных сборок на базе Debian, Ubuntu или CentOS.3. Хороший момент. Я бы все равно поместил это внутри дерева проекта, а не вне его, что было тем случаем, который я пытался решить (bud недостаточно хорошо сформулировал)