Передать переменные окружения в докер контейнер
Есть jenkins-job (не pipeline), которая тянет из гита код, собирает его и запускает в докер контейнере. Мне нужно передать в контейнер переменные окружения (желательно из файла). Я перепробовал все варианты, которые нашел в интернете, но не помогло. Вот текст jenkins job:
cp WL/${stageid}/env_settings.env ./env_settings.env
ls
docker build \
-t customer_front${stagePrefix} .
docker stop customer_front${stagePrefix} || true && docker rm
customer_front${stagePrefix} || true
#source env_settings.env
docker run \
-d --restart unless-stopped \
-e CLIENT_URL='https://test.customer.app' \
-e SITE_NAME='My best site' \
--name customer_front${stagePrefix} \
-p ${externalPort}:3000 \
customer_front${stagePrefix}
Это последняя версия файла, где я пытался передать аргументы хотя бы через параметр -e. Пробовал передавать --env-file env_settings.env (я качаю этот файл в первой строке job'ы), но и это не прокатило.
Вот dockerfile:
FROM node:12-alpine
#ARG API_CLIENT_URL
#ARG API_SITE_NAME=MySite
#ENV CLIENT_URL=$API_CLIENT_URL
ENV SITE_NAME
RUN apk update && apk upgrade
RUN apk add git
WORKDIR /app
COPY package*.json ./
RUN npm install
RUN ls
COPY . .
RUN ls
RUN npm run build
ENV NUXT_HOST=0.0.0.0
EXPOSE 3000
CMD [ "npm", "start" ]
Если во время сборки сделать (при раскомментированных аргументах и переменных в dockerfile) docker build --build-arg API_CLIENT_URL=https://test.customer.app, то я могу достучаться до API_CLIENT_URL, но мне не подходит вариант делать это все во время сборки, нужно во время запуска и желательно из файла.
Если кто-то заметил, что я делаю не так или знает как решить проблему, поделитесь опытом, пожалуйста
Ответы (1 шт):
нужно во время запуска и желательно из файла
согласно документации к команде run, можно использовать такие опции:
$ docker run -e var1=значение1 --env var2=значение2 ...
$ export var1=значение1
$ export var2=значение2
$ docker run --env var1 -e var2 ...
$ cat файл.с.переменными
var1=значение1
var2=значение2
$ docker run --env-file файл.с.переменными ...
во всех трёх вариантах вызова команды run процесс в контейнере получит две переменных окружения — var1 и var2 (со значениями значение1 и значение2).
для вашего случая, вероятно, подойдёт вариант два, где опциями перечисляются лишь имена передаваемых переменных, а значения для них берутся из соответствующих переменных окружения процесса, в котором выполняется команда run.