Docker RUN сохранить постоянные переменные окружения? - PullRequest
0 голосов
/ 20 января 2020
FROM bitnami/minideb:latest

RUN . /etc/os-release
RUN echo "code1=${VERSION_CODENAME}"
RUN . /etc/os-release && echo "code2=${VERSION_CODENAME}"

Когда я запускаю это, он печатает:

code1=
code2=buster

Есть ли способ сохранить переменные среды между командами RUN и / или отдельной командой для загрузки переменных среды из файла внутри контейнер?

1 Ответ

1 голос
/ 20 января 2020

Короче говоря,

  • используйте ENV для установки переменных окружения в изображение.
  • или source ваш файл env на docker run

Вот ваш Dockerfile:

FROM bitnami/minideb:latest

RUN . /etc/os-release
RUN echo "code1=${VERSION_CODENAME}"
RUN . /etc/os-release && echo "code2=${VERSION_CODENAME}"

Согласно вашему Dockerfile, движок docker интерпретирует инструкции следующим образом:

  1. RUN . /etc/os-release: запускает промежуточный контейнер из образа bitnami/minideb:latest и source файл /etc/os-release, затем фиксирует этот контейнер в изображении с идентификатором ( скажем ab12)
  2. RUN echo "code1=${VERSION_CODENAME}": запускает другой промежуточный контейнер из образа ab12, который был зафиксирован на предыдущем шаге. docker двигатель запускает echo "code1=${VERSION_CODENAME}" в этом контейнере, затем фиксирует его в другом образе cd34
  3. , как 2., но source и echo выполняются в том же промежуточном контейнере.

Очевидно, что на шаге 1 и 2 команды source и echo выполняются в разных контейнерах, поэтому вам не удалось получить нужные переменные.

Итак, ENV инструкция является рекомендуемым способом решения вашей проблемы. Но если вам действительно нужно прочитать envs из файла, вот обходной путь.

  1. подготовьте файл с именем my-env.sh:
#!/bin/bash
export ENV1=XXX
export ENV2=XXX
# ...
подготовить файл с именем entrypoint.sh:
#!/bin/bash
. /my-env.sh

# rest of the things you wanna do when start this image into a container
подготовить файл Docker:
FROM bitnami/minideb:latest

# copy files from local to image
COPY my-env.sh /my-env.sh
COPY entrypoint.sh /entrypoint.sh

# when start this image into a container, execute the following command
ENTRYPOINT ["bash", "/entrypoint.sh"]
построить изображение по docker build -t <repo:tag> .. Перед созданием образа ваш текущий рабочий каталог должен содержать:
  • my-env. sh
  • точка входа. sh
  • Dockerfile

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...