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

使用Docker Compose部署CXF Web Service失败求助

Docker部署CXF JAXRS服务失败排查方案

本地通过java -jar my-app.jar运行CXF JAXRS Web Service正常,请求http://localhost:333/hello/persons能返回预期JSON:

[{"id":1,"name":"A"},{"id":1,"name":"B"}]

但使用docker-compose部署后请求失败,以下是核心问题排查及修复方案:

1. 服务监听地址限制(核心问题)

在WebServer类中,服务绑定的地址为http://localhost:333/:

factoryBean.setAddress("http://localhost:333/");

Docker容器内的localhost仅指向容器自身回环接口,外部主机无法通过端口映射访问该地址。需修改为监听所有网卡:

factoryBean.setAddress("http://0.0.0.0:333/");

修改后服务会绑定容器内所有可用网卡,外部可通过localhost:333正常访问。

2. POM文件拼写错误

pom.xml中<verson>标签拼写错误,应为<version>:

<!-- 错误写法 -->
<verson>1.0-SNAPSHOT</version>
<!-- 修正后 -->
<version>1.0-SNAPSHOT</version>

该错误可能导致Maven构建异常,建议修正以避免后续问题。

3. 确认Person类序列化支持

确保Person类提供id和name的getter方法,Jackson JSON序列化依赖getter读取属性:

public class Person {
    private int id;
    private String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // 必须添加getter方法
    public int getId() { return id; }
    public String getName() { return name; }
}

缺少getter可能导致容器环境下序列化失败。

4. 容器内服务状态验证

部署后可进入容器验证服务状态:

  • 容器内请求测试:
docker exec -it my-app curl http://localhost:333/hello/persons
  • 查看服务启动日志:
docker logs my-app

若容器内请求正常,说明外部网络配置无问题;若失败,根据日志定位启动报错(如类缺失、端口占用等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:45:40