Docker: RUN cd... не работает должным образом

Следующий файл Docker:

FROM ubuntu:12.10
RUN mkdir tmp123
RUN cd tmp123
RUN pwd

имеет выход:

Uploading context 10240 bytes
Step 1 : FROM ubuntu:12.10
 ---> b750fe79269d
Step 2 : RUN mkdir tmp123
 ---> Running in d2afac8a11b0
 ---> 51e2bbbb5513
Step 3 : RUN cd tmp123
 ---> Running in 4762147b207c
 ---> 644801121b92
Step 4 : RUN pwd
 ---> Running in 3ed1c0f1049d
/
 ---> eee62a068585

при построении (команда сборки докеров)

похоже, что RUN cd tmp123 не имеет эффекта

Зачем?

Ответ 1

Это на самом деле ожидается.

Докер файл - это не что иное, как обертка для запуска докеры + фиксация докеров.

FROM ubuntu:12.10
RUN mkdir tmp123
RUN cd tmp123
RUN pwd

То же самое, что и делать:

CID=$(docker run ubuntu:12.10 mkdir tmp123); ID=$(docker commit $CID)
CID=$(docker run $ID cd tmp123); ID=$(docker commit $CID)
CID=$(docker run $ID pwd); ID=$(docker commit $CID)

Каждый раз, когда вы RUN, вы создаете новый контейнер, и поэтому pwd имеет значение "/".

Если вам это нравится, вы можете открыть вопрос о github, чтобы добавить инструкцию CHDIR в файл Docker.

Ответ 2

Может быть, вы можете попробовать это; Я не уверен, и я не могу попробовать. Если это не сработает, я надеюсь, что вы не будете снижать ставку.

Просто:

RUN 'cd tmp123 ; pwd'

Вместо

RUN cd tmp123
RUN pwd