簡體   English   中英

無法連接到 redis 容器

[英]Cannot connect to redis container

我正在嘗試使用環境變量將 redis 容器連接到 python 應用程序容器。 我將密碼作為環境變量傳遞但它沒有連接,如果我不使用環境變量並對密碼進行硬編碼,它可以正常工作,否則它會給出redis.exceptions.ConnectionError

version: "3.7"
services:
  nginx_app:
    image: nginx:latest
    depends_on:
      - flask_app
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8090:80
    networks:
      - my_project_network

  flask_app:
    build:
      context: .
      dockerfile: Dockerfile
    expose:
      - 5000
    environment:
      - PASSWORD=pass123a
    depends_on:
      - redis_app
    networks:
      - my_project_network

  redis_app:
    image: redis:latest
    command: redis-server --requirepass ${PASSWORD} --appendonly yes
    environment:
      - PASSWORD=pass123a
    volumes:
      - ./redis-vol:/data 
    expose:
      - 6379
    networks:
      - my_project_network
networks:
  my_project_network:

索引.py

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)

更新您的 docker-compose.yaml

環境是一個字符串列表:

docker-composer 插入 ${ENV} ,其中 ENV 的值是從 .env 文件加載的

利用:

command: redis-server --requirepass $PASSWORD --appendonly yes

代替:

command: redis-server --requirepass ${PASSWORD} --appendonly yes

您可以通過以下方式驗證容器內的環境變量:

docker-compose run --rm flask_app printenv | grep PASSWORD

那應該返回:

PASSWORD=pass123a

docker-compose 環境變量示例: 這里

看起來您錯過了將環境變量傳遞給您的 Redis 容器。

嘗試這個:

version: "3.7"
services:
  nginx_app:
    image: nginx:latest 
    #LOCAL IMAGE
    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
    environment:
      - PASSWORD=pass123a
    depends_on:
      - redis_app
    networks:
      - my_project_network

  redis_app:
    image: redis:latest
    command: redis-server --requirepass ${PASSWORD} --appendonly yes
    environment:
      - PASSWORD=pass123a
    volumes:
      - ./redis-vol:/data 
    expose:
      - 6379
    networks:
      - my_project_network
networks:
  my_project_network:

暫無
暫無

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

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