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

Docker部署Spring Boot SOAP服务localhost访问XSD/WSDL报错排查

问题定位

核心问题是docker-compose.yml中app服务未配置端口映射,容器内监听的8080端口没有暴露到宿主机,外部访问自然报连接拒绝。
你的应用代码、SOAP配置、数据库连接逻辑都没有问题——本地直接启动能正常访问、容器内服务可以正常写PostgreSQL已经能证明这点,问题完全出在Docker的网络配置层。

快速排查步骤

按顺序执行以下命令验证判断:

  1. 进入容器内部测试服务可用性:
    docker exec -it app curl http://localhost:8080/api/users.xsd
    
    如果命令能正常返回XSD内容,直接确认应用本身运行正常,问题就是端口没映射。
  2. 检查宿主机8080端口监听状态:
    Linux/macOS执行:
    netstat -tulpn | grep 8080
    
    Windows执行:
    netstat -ano | findstr 8080
    
    如果没有返回任何监听记录,进一步确认端口未映射到宿主机。
修复方法

修改docker-compose.yml中app服务的配置,添加ports字段完成宿主机到容器的端口映射,修正后的完整配置如下:

version: '2'

services:
  app:
    image: 'docker-spring-boot-postgres:latest'
    build:
      context: .
    container_name: app
    depends_on:
      - db
    ports:
      - "8080:8080" # 格式为 宿主机端口:容器内服务端口
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/compose-postgres
      - SPRING_DATASOURCE_USERNAME=compose-postgres
      - SPRING_DATASOURCE_PASSWORD=compose-postgres
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
      # 若加完端口映射仍无法访问,再加下面这行强制服务绑定所有网卡
      # - SERVER_ADDRESS=0.0.0.0

  db:
    image: 'postgres:13.1-alpine'
    container_name: db
    environment:
      - POSTGRES_USER=compose-postgres
      - POSTGRES_PASSWORD=compose-postgres
配置生效操作

修改完配置后,执行以下命令重建容器让配置生效:

docker-compose down
docker-compose up -d --build

启动完成后再访问http://localhost:8080/api/users.xsd即可正常返回XSD内容。

补充说明

  • 如果宿主机8080端口已经被其他进程占用,可以把映射的宿主机端口改成其他未被占用的值,比如8081:8080,对应访问地址改为http://localhost:8081/api/users.xsd即可。
  • 不需要修改任何Java代码、XSD定义或者Dockerfile内容,这些部分的配置都是正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:24:24