2026.1.7更新2.22.7时补充:
cd /
cd opt
cd halo
root@VM-4-13-ubuntu:/opt/halo# docker-compose down
Removing b0d24497f8e0_halo ... done
Removing network halo_default
root@VM-4-13-ubuntu:/opt/halo# docker-compose pull
Pulling halo ... done
root@VM-4-13-ubuntu:/opt/halo# docker-compose up -d
halo is up-to-date
# 之后等待,就可以重新登录halo博客
# 从登录云服务器开始,到更新完成的整个操作过程操作记录如上
# 在操作之前我已在博客后台进行备份,更新完成后数据还在因此没有使用恢复
# 但是建议以后得操作还是要进行备份
2025.12 首次更新博客
本次更新halo时,发现上次重新部署halo时并没有采用docker-compose方式部署,而是直接采用docker run进行部署的,因此导致本次试图更新的时候找不到 docker-compose.yml文件,因此也就没有使用一键更新的方式。
一、本次问题起源
此前因信息安全的原因进行过halo的重新部署,本想着这次应该轻车熟路,但是因为上次最后不是使用docker-compose进行安装的,因此没有办法使用一键安装。
首先我经历了较为长久的确定安装方式的研究,最终确定我是使用docker run部署的。
在这种情况下,只得采用博客备份、docker部署的halo删除、建立docker-compose.yml的方式重新部署。
二、本次的操作:
一是创建 docker-compose.yml文件
本次把文件放在了以下的路径中,并不是容器在这里。
sudo mkdir -p /opt/halo
cd /opt/halo
二是使用 nano,将下面的内容粘贴近yml文件中
version: "3.8"
services:
halo:
image: halohub/halo:2.21.10 # 建议指定一个已知稳定的版本号,而非 latest
container_name: halo
restart: unless-stopped # 除非手动停止,否则总是重启
volumes:
# 【关键】将你现有的 Halo 数据目录挂载到容器内
# 左边 /root/.halo 替换为你通过 `docker inspect halo` 查到的真实数据目录
- /root/.halo:/root/.halo2
ports:
- "8090:8090" # 保持与你当前映射的端口一致
# 外部访问地址,请根据你最终希望通过哪个域名访问来修改
# 例如:--halo.external-url=https://blog.yourdomain.com
command:
- --halo.external-url=http://localhost:8090/
三是停止并删除原来的halo docker,按照yml的配置重新拉取并部署
docker stop halo
docker rm halo
docker-compose up -d
四是运行 docker-compose ps或 docker ps,查看 halo容器的状态是否为 "Up"。
以后再更新时,使用以下命令即可。
每次更新,都必须要进行备份
docker-compose pull
# 1. 拉取新版本的镜像(如果yml文件中的镜像版本号已修改,此命令会下载新镜像)
docker-compose up -d
# 2. 使用新镜像重新创建并启动容器
目前还有一个疑点,但是不是很重要
即yml文件中的挂载地址和容器中的好像有一点差异,导致本次利用docker-compose安装时,数据都丢失了。
为什么说不重要呢?
因为不管怎么更新,我的博客数据是一定要备份的
因此,这个挂载不重要。
但是目前处于一种不确定,但是不太敢折腾的状态
等到下次版本的更新时看一下
一键更新后时无缝衔接呢,还是又被重新初始化了?
我个人猜测应该不会被初始化了