Docker, получающий доступ к пути вне контекста сборки для КОПИРОВАНИЯ

#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 недостаточно хорошо сформулировал)