docker-compose没有用flask设置环境变量

时间:2017-06-06 14:27:23

标签: python docker flask docker-compose

运行flask容器,当我尝试读取环境变量时,它们不是由docker compose设置的。我正在使用docker-compose file version 2

compose file:
    services:
        test
             build: ./test
             image: test:1.0
             container_name: test_flask
             ports:
                  - "80:80"
             env_file: .env
             environment:
                  - COUCHDB=http://192.168.99.100:5984
             depends_on:
                  - couchdb

我用env_file和环境指令试过了吗? 我也尝试将值放在双引号,单引号,没有引号,没有工作。 .env文件包含:

  COUCHDB="http://192.168.99.100:5984", also tried without quotes

然后我从python代码中读取变量,如下所示:

COUCH_SERVER = os.environ["COUCHDB"]

我也试过了     os.environ.get( '的CouchDB')

没有用。

服务器从Dockerfile启动,如下所示:

CMD服务apache2重启

我使用以下命令启动容器:

docker-compose up test

我正在使用Docker for Windows工具箱,版本为:

Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.04.0-ce
 API version:  1.28 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   4845c56
 Built:        Wed Apr  5 18:45:47 2017
 OS/Arch:      linux/amd64
 Experimental: false

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

我给你一个如何从应用程序中获取环境变量的例子。

搬运工-compose.yml

version: '2'

services:
  app:
      image: python:2.7
      environment:
        - BAR=FOO
      volumes:
        - ./app.py:/app.py
      command: python app.py

app.py

import os

print(os.environ["BAR"])

答案 1 :(得分:0)

我个人认为env变量必须在docker文件的environment部分下设置名称和值作为前缀。至少这是我在Kubernetes部署yaml上所使用的

env: -名称:CouchDB   值:“ Couch DB URL” -名称:“ ENV变量1”   值:“变量的某些值”

您可以尝试执行进入pod并尝试回显环境变量,以确保确定。

正如您所提到的,通过python脚本中的os.environ访问它可以使您顺利进行。

答案 2 :(得分:0)

我还有一个例子:
您可以使用 Dockerfile
传递 env 变量 像这样 ENV SECRET="abcdefg"在 Dockerfile 中。
所以完整的 Dockerfile 将如下所示:

FROM python:3.7.9
LABEL maintainer_name="Omar Magdy"
COPY requirements.txt requirements.txt
ENV SECRET="abcdefg"
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
ENV FLASK_ENV=development
ENV FLASK_DEBUG=0
CMD ["flask", "run"]

现在在 docker-compose.yml 中:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - "the_data_base:/db"
volumes:
  the_data_base:
    external: true

假设您创建了一个名为“the_data_base”的外部卷,用于将数据存储在外部卷中。
因此,我的解决方案建议在 Dockerfile 中创建环境变量,而不是在 docker-compose 文件中。
所以你在创建容器的那一刻就创建了环境变量。
:) :)