我有以下 git 存储库: Mqtt(https://github.com/manivsbh/exalens/tree/main/Mqtt_assignment_exalens)。我可以在本地运行它,但是在使用 docker 时,我可以运行所有内容,但消息始终存储在本地 redis 上。它不会在 docker 的 redis 上存储任何消息。我正在使用 mac 来完成这一切。请帮我弄清楚,我在这里做错了什么?我的快速 api 应该在点击时显示结果。
我尝试在本地卸载redis,我尝试更改端口但没有成功。
您已在代码中硬编码了 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"
进行这些更改后,它应该可以工作。