运行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
感谢您的帮助
答案 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 文件中。
所以你在创建容器的那一刻就创建了环境变量。
:) :)