Docker использовать переменную окружения в RUN - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть Dockerfile:

FROM prom/prometheus
RUN rm -f /etc/prometheus/prometheus.yml
ADD config/ /etc/prometheus/
RUN echo $ACTUATOR_PASSWORD > /etc/prometheus/actuator_password

И docker -компонент, который содержит:

  prometheus:
    image: szastarek/food-delivery-prometheus
    container_name: prometheus
    environment:
      - ACTUATOR_PASSWORD=iN09KtaW59dqeRylgZFV4aSZ
    ports:
      - "9090:9090"
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--storage.tsdb.path=/prometheus"
      - "--web.console.libraries=/usr/share/prometheus/console_libraries"
      - "--web.console.templates=/usr/share/prometheus/consoles"
    networks:
      food-delivery-net:
        aliases:
          - "prometheus"

Проблема в actuator_password файле, который создается в Dockerfile. Файл должен содержать пароль, который передается в переменной окружения, но он пуст. Итак, как я могу создать файл внутри docker контейнера, который будет содержать пароль, переданный в env?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

следующая строка будет запускаться только один раз во время сборки

RUN echo $ACTUATOR_PASSWORD > /etc/prometheus/actuator_password

, что делает его Build-Arg, и если вы хотите, чтобы пароль был статически установлен на вашем изображении, вам нужно передать пароль в качестве аргумента см .: https://docs.docker.com/compose/compose-file/#args

см. также: https://vsupalov.com/docker-env-vars/

Но если вы хотите, чтобы пароль был динамическим c и передается в контейнер через environment:, вам нужно будет добавить скрипт, который читает при запуске переменную среды ACTUATOR_PASSWORD и добавляет ее в /etc/prometheus/actuator_password до запуска процесса prometheus. Обычно это делается путем добавления или редактирования entrypoint

например ENTRYPOINT [ "/entrypoint.sh" ]

// entrypoint.sh
add_substitute_password
exec /bin/prometheus $@
0 голосов
/ 14 апреля 2020

Раздел "environment" файла compose определяет переменные среды, которые нужно определить в контейнере, запущенном из образа. Dockerfile определяет шаги для создания этого образа, прежде чем вы запустите его как контейнер. Это разница между временем сборки и настройкой времени выполнения.

Чтобы установить переменную среды в Dockerfile, вам нужно определить либо ENV, который будет постоянным как во время сборки в контейнерах, которые развертываются из этот образ или ARG, который можно настроить с помощью команды сборки и который применяется только на этом этапе сборки, а не в контейнерах, которые впоследствии развертываются из этого образа.

Дополнительные сведения см. в документации по Dockerfile. :

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