![](/img/trans.png)
[英]Understanding Gunicorn and Flask on Docker/Docker-Compose
[英]docker-compose not setting environment variables with 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_file 和 environment 指令? 我還嘗試將值放在雙引號、單引號、無引號中,都不起作用。 .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 測試
我正在使用 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
應用程序
import os
print(os.environ["BAR"])
我個人認為 env 變量必須在 docker 文件的環境部分下設置一個名稱和值作為前綴。 至少這是我在 Kubernetes 部署 yaml 上使用的
env:-名稱:CouchDB 值:“Couch DB URL”-名稱:“ENV 變量 1”值:'變量的某些值'
您可以嘗試 exec 進入 pod 並嘗試回顯環境變量以確保。
正如你所提到的,通過你的 python 腳本中的 os.environ 訪問它應該會讓你開始。
我還有一個例子:
您可以使用 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 文件內。
所以你在創建容器的那一刻就創建了環境變量。
:) :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.