python - 将 env 变量传递给 docker-compose

标签 python docker redis docker-compose dockerfile

我已经使用 python 和 redis 创建了一个示例 docker 应用程序。 Python连接redis来存储数据。我想将 password servername 作为 docker-compose 文件中的环境变量传递给 redis。我怎样才能做到这一点? Docker 组合:

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)

最佳答案

只需在 Flask 应用程序中定义环境变量并在 python 应用程序中执行 os.getenv ,然后将它们添加到 docker compose 文件中的 Flask 应用程序服务中:

flask_app:
  environment:
    RABBIT_USER: guest
    RABBIT_PASSWORD: pass123

在你的 python 文件中放置以下位置:

import os

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

关于python - 将 env 变量传递给 docker-compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62961019/

相关文章:

python - 如何使用列表值对字典进行排序?

Docker - 无法准备上下文 : unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx

python - 如果 session.modified : 不是 session,如何理解 flask session 片段

java - redisTemplate @Resource 不适用于 Spring Framework

python - Selenium/python - 找不到部分链接文本

Python每n个字符拆分字符串

python - Keras通过argmax输出单个值

docker - 如何在 Visual Studio 2017 版本 15.3.2 中暂时禁用来自 asp.net core 2.0 项目的 docker 支持?

django - 如何修复此错误 django.db.utils.OperationalError : could not translate host name "db" to address . Docker

python - 无需 Celery 或 Redis 即可进行进度跟踪的后台任务