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

Docker运行的JHipster生产模式应用无法在JHipster-console生成日志

解决Docker部署JHipster生产应用后Kibana无法获取日志的问题

这种情况我碰到过好几次,核心问题基本都是Docker网络隔离导致的,毕竟宿主机、Docker容器、Vagrant虚拟机这几层网络容易搞混,咱们一步步排查:

1. 先搞懂容器里怎么访问宿主机的Logstash

你在application-prod.yml里写localhost或者宿主机物理IP都没用——在Docker容器里,localhost指的是容器自己,而Vagrant的Ubuntu宿主机对于容器来说,是Docker网络的网关地址。

  • 先查Docker网关:在Ubuntu宿主机上跑这条命令:
    docker inspect bridge | grep Gateway
    
    一般会得到类似"Gateway": "172.17.0.1"的结果,这个就是容器能访问到宿主机的地址。
  • 把application-prod.yml里的logging.logstash.host改成这个网关地址,重新打包镜像或者挂载配置文件到容器里,再启动试试。

2. 确认Logstash的端口是对外开放的

JHipster默认用5000端口接收Logstash日志,得确保两个点:

  • JHipster-console容器已经把5000端口映射到宿主机:跑docker ps看容器的端口列,必须有0.0.0.0:5000->5000/tcp这样的映射,如果没有,启动容器时要加-p 5000:5000参数。
  • Ubuntu宿主机的防火墙没挡住这个端口:跑sudo ufw status,看5000/tcp是否在允许列表里,没开的话执行sudo ufw allow 5000/tcp。

3. 更稳妥的方案:把两个容器放到同一个Docker网络

如果网关地址的方法不好使,直接让JHipster应用容器和JHipster-console在同一个自定义网络里,这样它们可以用容器名互相访问,不用管IP的问题:

  • 创建自定义网络:
    docker network create jhipster-shared-net
    
  • 重启JHipster-console时加入这个网络(替换成你原来的启动命令):
    docker run --network jhipster-shared-net --name jhipster-console [你的其他启动参数]
    
  • 启动JHipster生产应用容器时也加入这个网络,然后把application-prod.yml里的logging.logstash.host改成jhipster-console(就是这个容器的名字),这样容器之间就能直接通信了。

4. 验证Logstash本身是否正常工作

有时候问题不在JHipster应用,而是Logstash没正常接收日志:

  • 在Ubuntu宿主机上跑这条命令发测试日志:
    echo "test log from host" | nc localhost 5000
    
  • 然后去Kibana里刷新,看能不能找到这条测试日志。如果能找到,说明Logstash没问题,那就是JHipster应用容器的配置或网络问题;如果找不到,就得检查JHipster-console里的Logstash配置了。

另外还要注意:生产模式下,有没有用环境变量覆盖了配置文件的设置?比如启动容器时如果加了-e LOGGING_LOGSTASH_ENABLED=false,那application-prod.yml里的enabled: true就会被覆盖,这点一定要检查!

内容的提问来源于stack exchange,提问作者J.K.J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:21:18