Как установить переменные окружения в Dockerfile через Azure DevOps - PullRequest
1 голос
/ 27 января 2020

В моих проектах Docker файл у меня есть некоторые переменные окружения, такие как:

ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=Password
ENV MSSQL_PID=Developer
ENV MSSQL_TCP_PORT=1433 

И я хотел бы передать пароль здесь как переменную окружения, установленную в моем конвейере.

В Azure DevOps У меня есть два конвейера. Один для построения решения и один для создания и отправки docker изображений в DockerHub. Существуют опции для установки переменных в обоих этих конвейерах: enter image description here enter image description here Я установил пароль в обоих конвейерах и отредактировал свой пароль в Dockerfile, чтобы он выглядел так:

ENV SA_PASSWORD=$(SA_PASSWORD)

Но это, похоже, не работает. Как правильно передать переменные окружения из Azure DevOps в Docker изображение?

Кроме того, это безопасный способ передачи секретов? Есть ли способ, чтобы кто-то мог прочитать секреты из Docker изображения?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 января 2020

Вы можете установить ARG var_name и указать ENV для переменных ARG. Затем вы можете заменить эти переменные, когда docker создаст образ $ docker build --build-arg var_name=$(VARIABLE_NAME)

Например, добавьте ARG в dockerfile и попросите переменную ENV:

ARG SECRET
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=$SECRET
ENV MSSQL_PID=Developer
ENV MSSQL_TCP_PORT=1433 

Вы можете используйте задачу сборки dock и задачу do * pu sh отдельно, так как команда buildandpu sh не может принимать аргументы. И установите переменную SECRET в вашем конвейере.

enter image description here

Установите аргументы сборки SECRET= $(SECRET) для замены ARG SECRET

enter image description here

Вы также можете обратиться к аналогичной теме .

0 голосов
/ 27 января 2020

Я использую расширение Replace Tokens именно для таких задач, как это: https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens

Тем не менее, помещение секретов в ваш Dockerfile может оказаться не самой лучшей идеей. Обычно вы предоставляете секреты или обычно конфигурацию времени выполнения в качестве переменных среды, когда вы фактически выполняете контейнер.

...