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

Windows10下Docker Host模式部署API无法被Postman访问问题

问题分析与解决方案

核心原因

Windows 10下Docker Desktop依赖WSL2虚拟机运行,--network=host模式实际共享的是WSL2虚拟机的网络栈,而非Windows主机的本地网络。这直接导致两个现象:

  • 容器内的127.0.0.1指向WSL2虚拟机,而非Windows主机的回环地址,所以Windows上用Postman访问127.0.0.1:8080会连接失败
  • docker ps中API容器端口列为空是正常情况:host模式下容器直接使用宿主机(WSL2)的端口,无需做端口映射,因此不会显示映射记录

解决方案

方案1:使用Docker自定义网络(推荐)

放弃host模式,通过Docker内部网络实现API与Mongo的通信,同时给API做端口映射供外部访问:

  1. 清理现有API容器:
    docker stop springbootskeletonapi && docker rm springbootskeletonapi
    
  2. 创建自定义Docker网络:
    docker network create app-network
    
  3. 重启Mongo容器到自定义网络(无需暴露端口给外部,内部网络可直接访问):
    docker run -v mongodata:/data/db -d --network=app-network --name dockermongo mongo:latest
    
  4. 启动API容器,映射端口并加入同一网络:
    docker run -d -p 8080:8080 --network=app-network --name springbootskeletonapi springbootskeletonapi:latest
    
  5. 修改Spring Boot的Mongo配置,将连接地址改为容器名解析:
    spring.data.mongodb.uri=mongodb://dockermongo:27017/your-db-name
    
    同一Docker网络内可直接通过容器名访问服务,无需指定IP。

方案2:继续使用host模式(适配WSL2网络)

如果坚持使用host模式,需要通过WSL2的IP访问API:

  1. 获取WSL2虚拟机的IP:在Windows命令行执行:
    wsl hostname -I
    
  2. 用该IP替代127.0.0.1访问API,例如:http://192.168.1.100:8080(实际IP以命令输出为准)
  3. 保持Mongo的连接配置为localhost:27017即可,因为host模式下容器共享WSL2网络,能访问到Mongo的映射端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:32:38