Установка аргументов сборки в docker-compose.yml с использованием env_file - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь использовать Docker и Docker Compose для создания приложения в контейнере.У меня есть учетная запись PubNub, которая позволяет мне использовать разные ключи API для разных сред (dev, test, prod).Чтобы помочь мне создать образы для этого, я пытаюсь использовать build args , установленный с env_file .

Это не работает.

WARNING: The PUB_KEY variable is not set. Defaulting to a blank string.
WARNING: The SUB_KEY variable is not set. Defaulting to a blank string.

Вопросы:

  • Какую ошибку я допускаю при настройке аргументов сборки?
  • Как это исправить?
  • ЭтоХороший способ установить ENV переменные для контейнеров scan и flask?

В самом низу находится Скриншот IntelliJ IDE , или текстовый код простониже.

Вот содержание docker-compose.yml:

version: '3.6'

services:

  scan:
    env_file:
      - sample.env
    build:
      context: .
      dockerfile: Dockerfile
      args:
        pub_key: $PUB_KEY
        sub_key: $SUB_KEY
      target: scan
    image: bt-beacon/scan:v1

  flask:
    env_file:
      - sample.env
    build:
      context: .
      dockerfile: Dockerfile
      args:
        pub_key: $PUB_KEY
        sub_key: $SUB_KEY
      target: flask
    image: bt-beacon/flask:v1
    ports:
      - "5000:5000"

И Dockerfile:

# --- BASE NODE ---
FROM python:3.6-jessie as base
ARG pub_key
ARG sub_key

RUN test -n "$pub_key"
RUN test -n "$sub_key"

# --- SCAN NODE ---
FROM base as scan

ENV PUB_KEY=$pub_key
ENV SUB_KEY=$sub_key

COPY app/requirements.scan.txt /

RUN apt-get update
RUN apt-get -y install bluetooth bluez bluez-hcidump python-bluez python-numpy python3-dev libbluetooth-dev libcap2-bin
RUN pip install -r /requirements.scan.txt
RUN setcap 'cap_net_raw,cap_net_admin+eip' $(readlink -f $(which python))

COPY app/src /app
WORKDIR /app

CMD ["./scan.py", "$pub_key", "$sub_key"]


# -- FLASK APP ---
FROM base as flask

ENV SUB_KEY=$sub_key

COPY app/requirements.flask.txt /
COPY app/src /app

RUN pip install -r /requirements.flask.txt

WORKDIR /app

EXPOSE 5000

CMD ["flask", "run"]

Наконец, sample.env:

# PubNub app keys here
PUB_KEY=xyz1
SUB_KEY=xyz2

enter image description here

1 Ответ

0 голосов
/ 30 мая 2018

env_file может устанавливать переменные среды только внутри сервисного контейнера.Переменные от env_file не могут быть введены в саму docker-compose.yml.

У вас есть такие опции ( подробно описан там ):

  • внедрить эти переменные воболочка, из которой вы запускаете docker-compose up
  • create .env файл, содержащий эти переменные (синтаксис идентичен вашему sample.env)

Лично я бы отделил процесс построения изображения ипроцесс запуска контейнера (снимите ответственность за сборку изображений с docker-compose на внешний скрипт, тогда процесс сборки можно будет легко настроить).

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