Изменить каталог команды в Docker?


214

В докере я хочу сделать это:

git clone XYZ
cd XYZ
make XYZ

Однако, поскольку нет команды cd, мне приходится каждый раз указывать полный путь (make XYZ / fullpath). Какие-нибудь хорошие решения для этого?



6
Команда
WORKDIR

1
Не обходной путь, это рекомендуемое решение docs.docker.com/engine/userguide/eng-image/…
Джон Джон Пихлер

Ответы:


151

Вы можете запустить скрипт или более сложный параметр для запуска. Вот пример из Dockerfile, который я скачал, чтобы посмотреть ранее:

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

Из-за использования '&&', он доберется до последней команды 'pip install' только в том случае, если все предыдущие команды были выполнены успешно.

Фактически, поскольку каждый RUN создает новый коммит и (в настоящее время) слой AUFS, если у вас слишком много команд в Dockerfile, вы будете использовать ограничения, поэтому объединение RUN (когда файл стабилен) может быть очень полезная вещь


99
Если вам интересно, эффект cdединственного длится для текущей RUNкоманды. Следующая RUNначнется с текущей WORKDIR.
Ричи

532

Для перехода в другой каталог используйте WORKDIR . Все команды RUN, CMD и ENTRYPOINT после WORKDIR будут выполняться из этого каталога.

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make

40
Использование WORKDIR также упоминается как лучшая практика докерфайла
Мартин Вулстенхулм

14
Я считаю, что это более подходящий ответ на вопрос
Хуан Лени

1
Обратите внимание, что это создает несколько слоев (я думаю?)
Sebi

Это должен быть принятый ответ. Протестировано и может подтвердить, что это работает
user1258361

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.