Docker构建返回代码22:Liberty服务器启动失败排查求助
获取Liberty服务器启动日志的方法
修改Dockerfile,构建失败时自动打印日志
将RUN configure.sh替换为以下内容,这样当configure.sh执行失败时,会先输出Liberty的核心日志再退出,你就能在Travis构建日志中看到具体错误:RUN configure.sh || ( \ echo "=== Liberty控制台日志 ===" && \ cat /logs/defaultServer/console.log && \ echo "=== Liberty消息日志 ===" && \ cat /logs/defaultServer/messages.log && \ exit 1 \ )查看Travis构建的临时容器日志
构建失败的错误信息里会给出临时容器ID(比如示例中的d67ac92aad57),在Travis构建环境中执行以下命令,即可获取容器内的完整日志:docker logs d67ac92aad57
服务器启动失败的可能排查方向
- Dockerfile冗余问题:开头的
FROM ubuntu:22.04完全多余——多阶段构建中只有最后一个FROM的镜像会作为最终基础,这一行会被直接忽略,建议删除以避免混淆。 - Server.xml配置错误:检查
server.xml是否存在无效配置,比如引用了不存在的Liberty特性、端口冲突、依赖外部服务但Travis环境无法访问等。本地正常可能是因为本地环境有对应依赖,而Travis环境没有。 - 应用包完整性问题:确认Travis构建生成的
app.war是否与本地一致、没有损坏。可以在构建镜像前添加步骤校验war包内容:jar tf /deploy/defaultServer/apps/app.war - 权限冲突问题:当前以root用户执行
configure.sh,但Liberty默认使用1001用户启动服务器,可能导致权限不足。可以尝试在RUN configure.sh前切换回1001用户:USER 1001 RUN configure.sh - Liberty特性缺失:如果
server.xml声明的特性在open-liberty:full-java11-openj9镜像中未包含,会导致启动失败,这类信息会明确出现在messages.log中。
内容的提问来源于stack exchange,提问作者Vaishnavi Killekar
相关产品推荐
相关产品推荐

