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

214

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

git clone XYZ
cd XYZ
make XYZ

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

RParadox
источник
связанные: stackoverflow.com/questions/17891669/…
trcarden
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
43
RUN git clone http://username:password@url/example.git
WORKDIR /folder
RUN make
alfonsoolavarria
источник