You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中无法连接WebSocket服务的问题求助

Docker容器化后WebSocket连接失败的排查与解决

问题核心原因

  1. 监听地址错误:你的WebSocket服务器监听ws://127.0.0.1:3003,但容器内的127.0.0.1是私有回环地址,宿主机或外部客户端无法通过端口映射访问到这个地址。
  2. HTTP/HTTPS配置冲突:ASPNETCORE_URLS设为https://+:3003,但你使用的是ws(HTTP协议)的WebSocket连接;若未配置HTTPS证书,Kestrel服务可能启动失败或端口监听异常。
  3. docker-compose语法错误:原配置中services下的myapp条目缺少冒号,会导致容器启动失败。
  4. 环境变量与实际监听不匹配:即便修改了环境变量,也需确保应用实际读取到正确配置并在指定端口监听。

分步修复方案

1. 修正WebSocket监听地址

将WebSocket服务器的监听地址从ws://127.0.0.1:3003改为ws://0.0.0.0:3003(若使用HTTPS则改为wss://0.0.0.0:3003)。0.0.0.0表示监听容器内所有网络接口,确保外部能通过端口映射连接。

2. 统一HTTP/HTTPS配置并修正docker-compose语法

方案一:使用HTTP(ws连接)

修改docker-compose.yml,修正语法错误并将HTTPS改为HTTP:

services:
  myapp:  # 补上缺失的冒号,修复语法错误
    container_name: MyApp
    hostname: MyApp-host
    image: ${DOCKER_REGISTRY-}myapp
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
    ports:
      - "3003:3003"
    environment:
      ASPNETCORE_URLS: "http://+:3003"  # 改为HTTP协议
    build:
      context: .
      dockerfile: MyApp\Dockerfile

同时删除Dockerfile中ENV ASPNETCORE_URLS=https://+:3003的配置,避免环境变量冲突。

方案二:使用HTTPS(wss连接)

若必须使用HTTPS,需为Kestrel配置证书,否则服务无法正常启动:

services:
  myapp:
    # 其他配置不变
    ports:
      - "3003:3003"
    environment:
      ASPNETCORE_URLS: "https://+:3003"
      ASPNETCORE_Kestrel__Certificates__Default__Path: "/app/your-cert.pfx"
      ASPNETCORE_Kestrel__Certificates__Default__Password: "your-cert-password"
    volumes:
      - ./local-path/to/your-cert.pfx:/app/your-cert.pfx  # 将本地证书挂载到容器内

此时客户端需使用wss://localhost:3003进行连接。

3. 验证容器内运行状态

  • 进入容器查看端口监听情况:
    docker exec -it MyApp netstat -tulpn
    
    需确认有进程监听0.0.0.0:3003。
  • 查看应用启动日志排查错误:
    docker logs MyApp
    
    若出现证书错误、端口占用等日志,针对性解决即可。

4. 检查宿主机端口与防火墙

  • 确认宿主机3003端口未被其他进程占用:
    # Windows系统
    netstat -ano | findstr :3003
    # Linux/macOS系统
    lsof -i :3003
    
  • 临时关闭宿主机防火墙测试,或为3003端口添加入站规则。

测试修复效果

修改完成后,重新构建并启动容器:

docker-compose down && docker-compose up --build

使用Postman连接ws://localhost:3003(或wss://localhost:3003,根据配置选择),确认连接成功。

内容的提问来源于stack exchange,提问作者Glaz97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:10:26