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

Docker启动liferay/portal镜像报错 进程被杀8080端口无限加载

Liferay Docker容器启动被Killed、页面无限加载问题排查方案

首先明确报错核心特征:/usr/local/bin/liferay_entrypoint.sh: line 41: 8 Killed start_liferay.sh是Linux系统OOM Killer(内存不足回收机制)强制杀死进程的标准输出,不是entrypoint脚本本身有语法错误——进程因为内存占用触达阈值被强杀,服务没有完成完整启动流程,才会导致访问8080端口时页面无限加载。

按以下顺序排查解决:

  • 先确认内存限制的实际生效逻辑
    你虽然在启动命令里加了-m 10g参数,但这个参数的生效前提是Docker服务本身能拿到这么多内存。如果是在Windows、macOS上用Docker Desktop运行,默认全局只给Docker分配2GB运行内存,你在run命令里写再大的-m参数都没用,实际容器可用内存还是受全局配置限制。
    排查方式:容器启动卡住时,新开终端执行docker stats查看对应Liferay容器的实时内存占用,看内存占用涨到固定值后就掉0、进程退出,就是撞到内存阈值被杀了。如果是桌面端Docker,先去Docker Desktop的设置-Resources页面,把分配给Docker的总内存调到12G以上保存重启Docker再试。
  • 手动指定JVM启动参数适配启动峰值
    Liferay 7.4 GA22首次启动时需要完成内置数据库表初始化、OSGi模块部署、搜索索引预热,峰值内存占用远高于日常运行状态,镜像内置的默认JVM参数经常无法覆盖首次启动的内存需求。启动时手动传入JVM参数避免内存溢出:
    docker run -it -m 12g -p 8080:8080 \
      -e JAVA_OPTS="-Xms4g -Xmx8g -XX:MaxMetaspaceSize=1g -XX:+UseG1GC" \
      liferay/portal:7.4.3.22-ga22
    
  • 不要提前访问页面,等启动完全完成
    Liferay首次启动耗时很长,根据机器性能不同通常需要5~15分钟,启动过程中访问8080端口就会出现无限加载的情况。等控制台输出Server startup in [xxxx] milliseconds的明确启动成功日志后,再访问localhost:8080即可。
  • 排查端口冲突
    启动前先在宿主机执行对应命令确认8080端口没有被其他服务占用:
    • Linux/macOS执行:lsof -i:8080
    • Windows执行:netstat -ano | findstr 8080
      如果有其他进程占用8080端口,要么停掉占用进程,要么把docker run的端口映射改成其他端口比如-p 8081:8080,通过8081端口访问。
  • 仍无法解决时导出完整日志定位
    如果以上操作后进程还是被Killed,启动时把全量日志导出到本地文件,查看进程被杀前的具体报错:
    docker run -it -m 12g -p 8080:8080 \
      -e JAVA_OPTS="-Xms4g -Xmx8g -XX:MaxMetaspaceSize=1g" \
      liferay/portal:7.4.3.22-ga22 2>&1 | tee liferay_start.log
    
    重点看日志里Killed字段出现前有没有java.lang.OutOfMemoryError相关报错,确认是堆内存不足、元空间不足还是其他资源限制导致的进程被杀,对应调大相关资源配额即可。

常见踩坑提示:绝大多数桌面端Docker运行该镜像出现的Killed问题,都是只给run命令加了-m参数,没有修改Docker Desktop全局内存配额导致的,实际容器可用内存远达不到Liferay 7.4的启动最低要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:27:20