Змінити команду каталогу в Docker?


214

У докері я хочу це зробити:

git clone XYZ
cd XYZ
make XYZ

Однак, оскільки немає команди CD, я повинен проходити повний шлях щоразу (робити XYZ / fullpath). Будь-які хороші рішення для цього?



6
Команда WORKDIR також відзначається як можливе вирішення
trcarden

1
Не вирішення, це рекомендоване рішення docs.docker.com/engine/userguide/eng-image/…
Джон Джон Піхлер

Відповіді:


151

Ви можете запустити скрипт або більш складний параметр до RUN. Ось приклад із завантаженого файлу 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 (коли файл стабільний) може бути дуже корисна річ.


98
У випадку, якщо вам цікаво, ефект cdлише триває для поточної RUNкоманди. Наступний RUNпочнеться від течії WORKDIR.
Річі

531

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

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make

40
Використання WORKDIR також цитується як найкраща практика докерфайлу
Martin Woolstenhulme

14
Я вважаю, що це більш відповідна відповідь на питання
Хуан Лені

1
Зверніть увагу , що це створює кілька шарів (я думаю?)
Sebi

Це має бути прийнятою відповіддю. Випробуваний і може підтвердити це працює
користувач1258361

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.