2013-12-17 2 views
82

В грузчиком я хочу сделать это:Docker: изменение команды каталога

git clone XYZ 
cd XYZ 
make XYZ 

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

+0

родственные: http://stackoverflow.com/questions/17891669/docker-command-fails-during-build-but-succeeds-while-executed-within-running-co – trcarden

+2

команды WORKDIR является как возможное обходное решение – trcarden

+0

Не обходное решение, это рекомендуемое решение https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir –

ответ

54

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

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

Из-за использования «& &», это будет только в финале «пункт установить» команду, если все предыдущие команды преуспели.

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

+6

В случае, если вам интересно, эффект из 'cd' длится только для текущей команды' RUN'. Следующий 'RUN' начнется с текущего' WORKDIR'. – Ritchie

234

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

RUN git clone XYZ 
WORKDIR "/XYZ" 
RUN make 
+12

Использование WORKDIR также упоминается как наилучшая практика [dockerfile best] (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#workdir) –

+2

Я считаю, что это более подходящий ответ на вопрос – purpletentacle

Смежные вопросы