菜单

kaoqi
kaoqi
发布于 2026-10-12 / 10 阅读
0
0

Halo的镜像分析

进入docker内部后,使用ps aux可以查看当前的进程情况:

可以看到,halo在docker中运行的主要服务为:

java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true org.springframework.boot.loader.launch.JarLauncher --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo_rksakh --spring.r2dbc.username=halo_hXG8K4 --spring.r2dbc.password=halo_kmRJ55 --spring.sql.init.platform=mysql --halo.external-url=http://localhost:8080

看不懂java或者spring架构,没有经验,这没关系,我们可以先上ls proc目录,找ps aux下这个进程对应的文件系统关联。

ls -l /proc/[pid]/cwd;可以查看当前主命令执行时的根目录

ls -l /proc/[pid]/exe;可以查看当前进程的主bin入口文件

cat /proc/[pid]/cmdline;可以查看执行时的完整命令

注意到,java命令本身可以直接了当的执行class类。

springboot相关的参数中,似乎给定了url域名解析的直观映射关系:

  • --halo.external-url=http://localhost:8080

  • --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo_rksakh

  • --spring.r2dbc.username=halo_hXG8K4

  • --spring.r2dbc.password=halo_kmRJ55

  • --spring.sql.init.platform=mysql

从面向对象的角度来说,这是halo这个spring架构尝试将不同的模块,比如用户名、密码、本地反向代理位置、数据库等内容单独模块化。

可以说,通过docker中对应软件的调试与观摩,基本确定,通过spring本身加参数的方法实现域名反向解析不怎么现实。

还是需要上nginx。


评论