Python docker compose未使用flask设置环境变量

Python docker compose未使用flask设置环境变量,python,docker,flask,docker-compose,Python,Docker,Flask,Docker Compose,运行flask容器,当我尝试读取环境变量时,docker compose不会设置这些变量。我正在使用docker compose文件版本2 compose file: services: test build: ./test image: test:1.0 container_name: test_flask ports: - "80

运行flask容器,当我尝试读取环境变量时,docker compose不会设置这些变量。我正在使用docker compose文件版本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_文件和环境指令都试过了? 我也试着用双引号、单引号、无引号、无引号来表示这些值。 .env文件包含:

  COUCHDB="http://192.168.99.100:5984", also tried without quotes
然后我从python代码中读取如下变量:

COUCH_SERVER = os.environ["COUCHDB"]
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"]
我也试过了 os.environ.get('COUCHDB')

没有一个奏效

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

CMD服务apache2重新启动

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

docker合成测试

我正在使用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

感谢您的帮助

我给您留下一个示例,说明如何从应用程序中获取环境变量

docker-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"])

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

环境: -姓名:CouchDB 值:“coach DB URL” -名称:“环境变量1” 值:“变量的某些值”

您可以尝试执行pod并尝试回显环境变量以确保安全


正如您所提到的,通过python脚本中的os.environ访问它应该可以让您继续

我还有另一个例子:
您可以使用Dockerfile传递env变量
就像Dockerfile中的ENV SECRET=“abcdefg”一样。
因此,完整的Dockerfile将如下所示:

COUCH_SERVER = os.environ["COUCHDB"]
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
假设您已经创建了一个名为“数据库”的外部卷,以将数据存储在外部卷中。
因此,我的解决方案建议在docker文件中创建环境变量,而不是在docker compose文件中创建环境变量。
因此,您可以在创建容器时创建环境变量。

:):)

你的写作文件的第一行是什么?您使用的版本是什么?docker compose config的输出是什么?我复制了您的版本,在第一行添加了
version:'2'
,并看到了您的环境变量如果打印所有环境变量,您会看到什么
docker compose exec test env
docker compose文件的第一行是[version:'2']docker compose config:test:build:context:D:\dev\uploader container\u name:test\u flask依赖于:-couchdb环境:couchdb:image:test:1.0端口:-80:80版本:'2.0'谢谢您的回复,不幸的是,我不明白你所说的“项目是你应该做什么来获得环境的价值”是什么意思