Docker部署Spring Boot SOAP服务localhost访问XSD/WSDL报错排查
问题定位
核心问题是docker-compose.yml中app服务未配置端口映射,容器内监听的8080端口没有暴露到宿主机,外部访问自然报连接拒绝。
你的应用代码、SOAP配置、数据库连接逻辑都没有问题——本地直接启动能正常访问、容器内服务可以正常写PostgreSQL已经能证明这点,问题完全出在Docker的网络配置层。
快速排查步骤
按顺序执行以下命令验证判断:
- 进入容器内部测试服务可用性:
如果命令能正常返回XSD内容,直接确认应用本身运行正常,问题就是端口没映射。docker exec -it app curl http://localhost:8080/api/users.xsd - 检查宿主机8080端口监听状态:
Linux/macOS执行:
Windows执行:netstat -tulpn | grep 8080
如果没有返回任何监听记录,进一步确认端口未映射到宿主机。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
相关产品推荐
相关产品推荐

