Python docker compose未使用flask设置环境变量
运行flask容器,当我尝试读取环境变量时,docker compose不会设置这些变量。我正在使用docker compose文件版本2Python 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
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'谢谢您的回复,不幸的是,我不明白你所说的“项目是你应该做什么来获得环境的价值”是什么意思