如何使用Docker的Redis服务器代替本地redis服务器

问题描述 投票:0回答:1

我有以下 git 存储库: Mqtt(https://github.com/manivsbh/exalens/tree/main/Mqtt_assignment_exalens)。我可以在本地运行它,但是在使用 docker 时,我可以运行所有内容,但消息始终存储在本地 redis 上。它不会在 docker 的 redis 上存储任何消息。我正在使用 mac 来完成这一切。请帮我弄清楚,我在这里做错了什么?我的快速 api 应该在点击时显示结果。

我尝试在本地卸载redis,我尝试更改端口但没有成功。

python docker redis mqtt fastapi
1个回答
0
投票

您已在代码中硬编码了 Redis 连接此处

redis_host = "localhost" 

您对 mongodb 和 mqtt 也有同样的问题:

# on main.py
mongo_uri = "mongodb://localhost:27017/"  # Change this if your MongoDB is on a different host

# on publisher.py
broker_address = "localhost"

您应该使用某种设置来控制这些变量,但您可以首先通过在代码中更改它来测试它,以确保其有效。

另一件事是您还需要考虑您创建的网络。

更新您的

docker-compose.yaml
以添加所有服务的主机名。 Redis 示例(也将主机名属性添加到其他属性中):

  redis:
    image: redis
    hostname: redis_host
    container_name: redis
    ports:
      - "6379:6379"
    networks:
      - redis_network

更新您的应用程序容器以使用其他网络:

  fastapi:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: fastapi
    ports:
      - "8000:8000"
    depends_on:
      - mqtt_broker
      - mongodb
      - redis
    networks:
      - fastapi_network
      - redis_network
      - mongodb_network
      - mqtt_network

更新代码中的连接字符串:

# on main.py
mongo_uri = "mongodb://mongodb_host:27017/"
...
redis_host = "redis_host"

# on publisher.py
broker_address = "mqtt_broker_host"

进行这些更改后,它应该可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.