簡體   English   中英

將環境變量傳遞給 docker-compose

[英]Pass env variable to docker-compose

我已經使用 python 和 redis 創建了一個示例 docker 應用程序。 Python連接到redis存儲數據。 我想將password servername名傳遞給 redis 作為 docker-compose 文件中的環境變量。 我怎樣才能做到這一點? Docker-compose:

version: "3.7"
services:
  nginx_app:
    image: nginx:latest 
    depends_on:
      - flask_app
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8082:80
    networks:
      - my_project_network
  flask_app:
    build:
      context: .
      dockerfile: Dockerfile
    expose:
      - 5000
    depends_on:
      - redis_app
    networks:
      - my_project_network
  redis_app:
    image: redis:latest
    command: redis-server --requirepass pass123 --appendonly yes
    volumes:
      - ./redis-vol:/data 
    expose:
      - 6379
    networks:
      - my_project_network
networks:
  my_project_network:
from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis_app', port=6379, password='pass123')
@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello World! I have been seen %s times.' % redis.get('hits')
if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

just define environement variables in flask app and do os.getenv of them in python application, than add them to your flask app service in docker compose file:

flask_app:
  environment:
    RABBIT_USER: guest
    RABBIT_PASSWORD: pass123

在您的 python 文件中放置以下內容:

import os

redis = Redis(host='redis_app', port=6379, password=os.getenv('RABBIT_PASSWORD'))

正如@AndriyIvaneyko 所說,在您的 docker-compose 中:

flask_app:
  environment:
    - PASSWORD=password

獲得此值的另一種方法是在 shell export PASSWORD="password"中設置環境變量並將其導入 docker-compose:

flask_app:
  environment:
    - PASSWORD

這是我推薦的方法,因為它確保您的憑據在 docker-compose 文件中以純文本形式不可用。 此外,由於 env 變量可以獨立配置,協作變得更簡單。

在您的 python 中:

from flask import Flask
from redis import Redis
import os

app = Flask(__name__)
redis = Redis(host='redis_app', port=6379, password=os.getenv('PASSWORD'))
@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello World! I have been seen %s times.' % redis.get('hits')
if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

您可以對其他環境變量執行相同的操作。 是文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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