使用env_文件在docker-compose.yml中设置生成参数

使用env_文件在docker-compose.yml中设置生成参数,docker,docker-compose,Docker,Docker Compose,我正在尝试使用Docker和Docker Compose创建一个容器化应用程序。我有一个PubNub帐户,它允许我为不同的环境(开发、测试、产品)使用不同的API键。为了帮助我为此构建图像,我尝试使用buildargs和env_文件一起设置 它不起作用了 WARNING: The PUB_KEY variable is not set. Defaulting to a blank string. WARNING: The SUB_KEY variable is not set. Defaulti

我正在尝试使用Docker和Docker Compose创建一个容器化应用程序。我有一个PubNub帐户,它允许我为不同的环境(开发、测试、产品)使用不同的API键。为了帮助我为此构建图像,我尝试使用buildargsenv_文件一起设置

它不起作用了

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.
问题:

  • 我在设置构建参数时犯了什么错误
  • 我怎么修理它
  • 这是为容器
    scan
    flask
    设置
    ENV
    变量的好方法吗
最底部是一个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

env_文件
只能在服务容器内设置环境变量。无法将
env_文件
中的变量注入
docker compose.yml
本身

您有这样的选项():

  • 将这些变量注入shell,从中运行
    docker compose up
  • 创建包含这些变量的
    .env
    文件(语法与
    示例.env
    相同)

就我个人而言,我会将图像构建过程和容器启动过程分开(将图像构建责任从docker compose转移到外部脚本,这样构建过程就可以轻松配置)

谢谢-听起来答案好像是“你想要的现在不可能。”要清楚,你的首选是使用脚本调用
构建
并推送到Docker repo,然后使用
Docker compose.yml
拉现有图像?如果你想要快速、简单的解决方案,只需从compose中删除
env_文件
部分。然后将
sample.env
重命名为
.env
,我看到的一切都应该正常工作-因此这里只有一个文件可以正常工作,它的名称仅为
.env
。谢谢。我将文件重命名为“.env”,Docker部署成功。但是密钥不在容器环境中!任何想法?
ARG
语句必须出现在每个构建阶段,而不仅仅是在基础阶段