Traefik作为负载均衡时,Docker容器间无法消费SSE数据流的问题求助
Traefik作为负载均衡时,Docker容器间无法消费SSE数据流的问题求助
我搭了一套基础的Docker部署环境:factory-service会生成持续的数据流,通过FastAPI对外暴露,目标是给另一个容器verification-service消费。我想用Traefik作为两个容器之间的负载均衡器。
目前的情况是:我可以直接用http://localhost:8001/stream消费数据流,也能通过Traefik的http://factory.localhost/stream访问到,但就是没法在verification-service容器里消费这个流。
下面是我的相关代码和配置:
factory-service的FastAPI代码
@app.get("/stream") async def stream_data(): return StreamingResponse(generate_sensor_data(), media_type="text/event-stream")
verification-service的代码
import requests print("Connecting ...") response = requests.get("http://factory.localhost/stream", stream=True) print(response.status_code, response.text)
docker-compose配置
services: factory-service: build: context: ./factory dockerfile: Dockerfile container_name: factory_service ports: - "8001:8001" labels: - "traefik.enable=true" - "traefik.http.routers.factory.rule=Host(`factory.localhost`)" - "traefik.http.services.factory.loadbalancer.server.port=8001" - "traefik.http.middlewares.sse.headers.customResponseHeaders.Access-Control-Allow-Origin=*" - "traefik.http.middlewares.sse.headers.customResponseHeaders.Cache-Control=no-cache" - "traefik.http.middlewares.sse.headers.customResponseHeaders.Connection=keep-alive" - "traefik.http.routers.factory.middlewares=sse" - "traefik.http.routers.factory.entrypoints=web" networks: - app-network verification-service: build: context: ./verification dockerfile: Dockerfile container_name: verification_service depends_on: factory-service: condition: service_started networks: - app-network traefik: image: traefik:v3.3 command: - "--log.level=DEBUG" - "--api.insecure=true" - "--providers.docker" - "--providers.docker.exposedbydefault=false" - "--entryPoints.web.address=:80" ports: - "80:80" - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock networks: - app-network networks: app-network: driver: bridge
我已经看过一些相关问题和flexguse的文档,但没法把他们的解决方案适配到我的场景里,希望能得到大家的帮助。
备注:内容来源于stack exchange,提问作者LeXXan
相关产品推荐
相关产品推荐

