ada88
发布于 2026-02-16 / 0 阅读
0

halo Docker部署

之间的1.x用的是h2数据库,升级2的时候莫名的数据库搞没了,什么文章都没留下来,于是换到了mysql数据库:

我用的是hub.docker.com的镜像halohub/halo:2:

初次配置:docker run

-d

--name='0halo'

--net='bridge'

--pids-limit 2048

-e 'spring.r2dbc.url'='r2dbc:pool:mysql://ip:端口/数据库名'

-e 'spring.r2dbc.username'='用户名'

-e 'spring.r2dbc.password'='密码'

-e 'spring.sql.init.platform'='mysql'

-p '8090:8090/tcp'

-v '/mnt/文件夹路径/halo2/':'/root/.halo2':'rw' 'halohub/halo:2'

结果数据库还是h2,配置没有生效,后来经过检查改成了如下配置,生效了:

docker run
  -d
  --name='0halo'
  --net='bridge'
  --pids-limit 2048
  -e 'halo.external-url'='https://www.yt6.cn/'
  -e 'SPRING_R2DBC_URL'='r2dbc:pool:mysql://ip:端口/数据库名'
  -e 'SPRING_R2DBC_USERNAME'='用户名'
  -e 'SPRING_R2DBC_PASSWORD'='密码'
  -e 'SPRING_SQL_INIT_PLATFORM'='mysql'
  -l net.unraid.docker.managed=dockerman
  -p '8090:8090/tcp'
  -v '/mnt/disk2/appdata/halo/':'/root/.halo2':'rw' 'halohub/halo:2'

经过分析可能是因为数据库属于spring的底层配置,Spring Boot AutoConfiguration 阶段就需要用,这时spring.r2dbc.url没生效,而是用SPRING_R2DBC_URL是:

  • Spring 官方标准映射格式

  • Docker 官方推荐格式

  • 符合 POSIX 规范

  • 不依赖 shell 特性

  • 所有容器平台都稳定支持

而halo.external-url是在spring启动之后的应用初始化阶段使用:

  • 在应用 fully 启动后读取

  • 即使不是标准 Spring 环境变量格式,也可能被正确注入

  • 是 Halo 自己定义的配置