Передача переменной в скрипт сборки Docker - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь передать переменную в простой сценарий Docker

Я попробовал метод, описанный здесь .

FROM golang:latest

ARG buildtime_variable=default_value 

ENV env_var_name=$buildtime_variable

RUN echo $env_var_name

Я попытался построить его с помощью

сборка докера --build-arg buildtime_variable = a_value.

И я получаю результаты

Отправка контекста сборки в демон Docker 2.048kB

Шаг 1/4: ОТ ГОЛАНГА: последний ---> da66b002dd02

Шаг 2/4: ARG buildtime_variable = default_value ---> Запуск в 91055d467539 Удаление промежуточного контейнера 91055d467539 ---> 1241ad5c9f12

Шаг 3/4: ENV env_var_name = $ buildtime_variable ---> Запуск в c61292041ccf Удаление промежуточного контейнера c61292041ccf ---> 4eeac4402f5b

Шаг 4/4: RUN echo $ env_var_name ---> Запуск в 80ba16d2ee9c Удаление промежуточного контейнера 80ba16d2ee9c ---> b814420cc448 Успешно построенный b814420cc448

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

Я попробовал это с RUN echo A, что дало ожидаемый результат эхо A

Пора использовать env-файл?или мне не нужно прибегать к этому?

РЕДАКТИРОВАТЬ

Только что сделал обновление, информация о моей версии

версия докера Client: Docker Engine - Версия сообщества:
18.09.2 Версия API: 1.39 Версия Go: go1.10.8 Git commit: 6247962 Построен: Sun 10 февраля 04:12:31 2019 OS / Arch: windows / amd64 Экспериментальный: false

Сервер: Docker Engine - Community Engine: Версия: 18.09.2 Версия API: 1.39 (минимальная версия 1.24) Версия Go:
go1.10.6 Git commit: 6247962 Год постройки: Sun Feb 10 04:28:48 2019OS / Arch: windows / amd64 Экспериментальный:
false

EDIT

Я только что попытался переключиться на контейнеры Linux и попробовал пример из здесь

FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER v1.0.0
RUN echo $CONT_IMG_VER

сборка докера --build-arg CONT_IMG_VER = v2.0.1.

Это фактически выводит значение!

к сожалению, это значение по умолчанию v1.0.0 вместо переменной, определенной --build-arg

Кроме того, мне нужно это для работы с Windows Container.

1 Ответ

0 голосов
/ 22 февраля 2019

Это не относится к актуальному вопросу, но я чувствую, что оно решает проблему, используя рекомендуемый способ dockerising .

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

Вы можете сделать это с помощью docker-compose.Там мы можем указать файл .env, содержащий все переменные среды, которые мы хотим.

Создать файл docker-compose.yml:

version: '3'
services:
  app:
    image: golang:latest
    container_name: golang_app
    env_file:
      - variables.env
    command: ping -t localhost

Создать файл variables.env в той же папке с содержимым:

env_var_name=a_value

Вы можете запустить контейнер как docker-compose up.

Теперь, если вы войдете внутрь контейнера, используя docker exec -it golang_app cmd и тип echo $env_var_name, вы должны увидеть a_value.

Редактировать : В Windows переменные env доступны как% var%.Поэтому попробуйте echo %env_var_name% внутри контейнера.

SET дает список всех переменных env.Вы можете видеть, что env_var_name указан со значением a_value.

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