Ответ 1
Как показано проблема 684, export
не будет сохраняться через изображения. (Не забывайте, что каждая директива Dockerfile будет генерировать промежуточный контейнер, помещенный в промежуточное изображение: это изображение не сохранит экспортированное значение)
ENV
будет:
Переменные среды, установленные с помощью
ENV
, будут сохраняться, когда контейнер будет запущен из полученного изображения.
Вы можете просмотреть значения с помощьюdocker inspect
и изменить их с помощьюdocker run --env <key>=<value>
.
Проблема иллюстрирует, что с помощью:
RUN export PATH=$PATH:/foo/bar # from directly in builder
Когда я делаю
docker run [img] bash -c 'echo $PATH'
, он никогда не включает/foo/bar
.
Попробуйте
Создайте новый файл докеров, содержащий:
FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
Затем постройте его. Результатом последнего шага является:
Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
---> Running in eb66196b238d
foofoo bazbaz
Вы можете видеть:
-
FOO
сохраняется через промежуточные контейнеры благодаря ключевому словуENV
; -
BAR
не сохраняется на следующем шаге из-за командыexport
; -
BAZ
отображается правильно, потому что переменная используется в одном контейнере.