Как перейти вверх по одной папке в Dockerfile - PullRequest
0 голосов
/ 13 июня 2019

У меня возникли проблемы с созданием образа докера, потому что код структурирован. Код написан на C #, и в решении есть множество проектов, которые «поддерживают» приложение, которое я хочу построить.

Моя проблема в том, что если я помещаю докер-файл в корень, я могу создать его без проблем, и это нормально, но я не думаю, что это оптимальный путь, потому что у нас есть другие док-файлы, которые нам также нужно собрать, и если Я положил их все в корневую папку, я думаю, что это будет грязно.

Так что, если я помещаю dockerfile в папку с приложением, как мне перейти в корневую папку, чтобы получить нужные мне папки?

Я пытался с "../", но, с моей точки зрения, это не сработало. Есть ли способ сделать это, или какова лучшая практика в этом сценарии?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

TL; DR

запустите его из корневого каталога:

docker build . -f ./path/to/dockerfile


длинный ответ:

в dockerfile вы не можете подняться.

почему

когда демон docker создает ваш образ, он использует 2 параметра:

  • ваш Dockerfile
  • context

контекст - это то, что вы называете . в файле 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 разделу сборки (вы указываете там контекст и путь к докер-файлу)

надеюсь, что это имело смысл.

0 голосов
/ 13 июня 2019

Вы можете использовать команду RUN и после & делать все, что вы хотите.

RUN cd ../ & 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...