簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM