免费使用gpt5.5, 注册即送一个月Pro>>>

Certimate升级迁移指南

🙋 用户

docker run -d \ –name certimate \ –restart unless-stopped \ -p 8090:8090 \ -v /etc/localtime:/etc/localtime:ro \ -v /etc/timezone:/etc/timezone:ro \ -v $(pwd)/data:/app/pb_data \ certimate/certimate:latest 上面是最新的安装方式,但我已经在宝塔安装了旧版本,有个说明文字现在想升级怎么弄,此版本无功能性更新,仅标记仓库转移至 certimate-go/certimate。 如果你正在使用 Docker 部署 Certimate,请切换镜像名 usual2970/certimate 为 certimate/certimate。原镜像后续不再有版本更新。


🤖 DeepSeek

根据你的描述,旧版本使用的是 usual2970/certimate 镜像,现在需要迁移到 certimate/certimate。由于你提到“此版本无功能性更新”,说明两个镜像的latest版本代码完全一致,只是仓库转移了。

在宝塔面板中升级,推荐以下安全无损的操作步骤:

第一步:停止并删除旧容器(数据不会丢失)

由于数据保存在挂载目录 $(pwd)/data 中,删除容器不影响证书和配置。

  1. 在宝塔面板的 Docker 管理器终端 中,执行:

bash

docker stop certimate
docker rm certimate

第二步:拉取新镜像并重建容器

使用你提供的新命令创建容器,重点注意:需要确保挂载路径与旧容器完全一致,否则会读取不到旧数据。

如果你旧容器也是在 ~/data 目录下,在宝塔终端执行:

bash

docker run -d \
  --name certimate \
  --restart unless-stopped \
  -p 8090:8090 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -v $(pwd)/data:/app/pb_data \
  certimate/certimate:latest

针对宝塔面板的特殊操作(避坑指南)

由于宝塔的 Docker 项目通常通过可视化界面创建,直接复制命令行可能不生效。请按以下方式操作:

  1. 进入宝塔 Docker 面板 -> 容器列表,确认旧容器的具体端口映射目录挂载路径(记下来)。
  2. 删除旧容器(注意:不要勾选“删除关联的挂载目录/数据卷”,只删容器)。
  3. 点击 创建容器
  • 镜像:填写 certimate/certimate:latest
  • 端口映射:填 8090:8090(或保持你原来的端口)
  • 挂载目录:添加两行
  • 服务器目录:/etc/localtime → 容器目录:/etc/localtime(只读)
  • 服务器目录:/etc/timezone → 容器目录:/etc/timezone(只读)
  • 最关键:服务器目录填旧容器使用的 data 绝对路径(例如 /www/wwwroot/certimate/data) → 容器目录填 /app/pb_data
  1. 点击提交。

第三步:验证升级是否成功

容器启动后,访问 http://你的IP:8090

  • 如果能直接登录且看到之前的证书列表,说明升级成功。
  • 如果提示初始化页面(要求新建账户),说明挂载路径错了,请勿操作,立即停止容器并检查挂载路径是否正确。

最后:清理旧镜像(可选)

确认新容器运行正常后,在宝塔 Docker 面板的镜像管理中删除 usual2970/certimate 释放硬盘空间。

特别提醒:由于你的数据映射在 $(pwd)/data,如果在宝塔终端执行命令时 pwd 目录不对,会导致数据丢失假象。建议在宝塔中先用 pwd 确认当前路径,或直接使用绝对路径(如 /root/data)替换 $(pwd)/data,确保万无一失。


🙋 用户

[root@VM-0-8-centos ~]# docker stop certimate Error response from daemon: No such container: certimate


🤖 DeepSeek

看到这个提示,说明你的容器名称不叫 certimate,或者容器已经处于停止状态。

我们先来排查一下你的旧容器具体情况,请按顺序执行以下命令:

1. 查看所有容器(包括已停止的)

在终端执行:

bash

docker ps -a | grep certimate

或者搜索所有包含 usual2970 的容器:

bash

docker ps -a | grep usual2970

把命令输出的结果发给我,我帮你确认旧容器的准确名称和挂载路径。

2. 如果确实没有任何容器(可能之前已删除)

如果上面的命令没有任何输出,说明容器已经不存在了。那你可以直接执行拉取新镜像并创建容器的命令

bash

docker run -d \
  --name certimate \
  --restart unless-stopped \
  -p 8090:8090 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -v $(pwd)/data:/app/pb_data \
  certimate/certimate:latest

但需要特别注意$(pwd)/data 这个路径,需要确认里面是否有你之前的证书数据。你可以先执行:

bash

ls -la $(pwd)/data

看看这个目录下是否有文件(比如 pb_data 目录或 *.db 文件)。

  • 如果有文件:直接执行上面的 docker run 命令即可,数据会自动继承。
  • 如果没有文件或目录不存在:说明你之前的数据保存在其他路径,需要找到旧的数据目录才能恢复。

3. 如果你不确定旧数据在哪里

可以搜索一下系统里可能的数据库文件:

bash

find / -name "*.db" 2>/dev/null | grep -i certimate

或者搜索 pb_data 目录:

bash

find / -type d -name "pb_data" 2>/dev/null

先执行第 1 步的 docker ps -a | grep certimate,把结果告诉我,我帮你精确判断下一步怎么操作,避免数据挂载错路径导致看不到旧证书。


🙋 用户

29088f5bc388 certissl:latest “./certimate serve -…” 3 months ago Up 4 weeks 0.0.0.0:8090->8090/tcp, :::8090->8090/tcp ssl_xu


🤖 DeepSeek

找到了!你的旧容器信息很清楚了:

  • 容器名称ssl_xu
  • 使用的镜像certissl:latest(这就是旧版镜像)
  • 端口映射8090:8090

现在升级的关键是:找出旧容器的数据挂载路径,这样才能在新容器中复用数据。

第一步:查看旧容器的详细挂载信息

执行以下命令查看 ssl_xu 容器的完整配置:

bash

docker inspect ssl_xu | grep -A 5 "Mounts"

或者更详细的:

bash

docker inspect ssl_xu | grep -A 10 "HostConfig"

请把输出结果发给我,我帮你确认数据目录的准确路径。

第二步:推测数据位置(提前准备)

根据你的容器名 ssl_xu 和镜像名 certissl,数据很可能在以下位置之一:

bash

# 方法1:检查当前目录下的 data 文件夹
ls -la ~/data/

# 方法2:检查根目录下的 data 文件夹
ls -la /data/

# 方法3:检查 docker 卷
docker volume ls | grep -i ssl

# 方法4:在容器内直接查看(如果容器还在运行)
docker exec ssl_xu ls -la /app/pb_data/

第三步:根据找到的路径执行升级

情况A:如果数据在 ~/data//data/ 假设找到的路径是 /root/data,则执行:

bash

# 停止旧容器
docker stop ssl_xu

# 删除旧容器(数据在宿主机,删除容器不影响)
docker rm ssl_xu

# 用新镜像创建容器,注意修改 -v 后面的路径为实际路径
docker run -d \
  --name certimate \
  --restart unless-stopped \
  -p 8090:8090 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -v /root/data:/app/pb_data \
  certimate/certimate:latest

情况B:如果数据在 Docker 卷中 如果 docker inspect 显示挂载的是卷(Volume),需要先备份数据再迁移。

先把 docker inspect ssl_xu | grep -A 5 "Mounts" 的输出发给我,我帮你确认具体路径,然后给你精确的升级命令。这样最安全,不会丢数据。


🙋 用户

“Mounts”: [], “Config”: { “Hostname”: “29088f5bc388”, “Domainname”: “”, “User”: “”, “AttachStdin”: false,


🤖 DeepSeek

从输出来看,"Mounts": [] 表示这个容器没有挂载任何外部目录

这意味着:

重要发现:数据在容器内部

旧容器 ssl_xu 的数据(证书、配置、数据库)都保存在容器内部/app/pb_data 目录中,并没有映射到宿主机的硬盘上。

这带来一个问题:如果直接删除旧容器再创建新容器,数据会全部丢失!

解决方案:先备份容器内的数据

第一步:从旧容器中复制数据出来

执行以下命令,将旧容器的数据备份到宿主机:

bash

# 创建备份目录
mkdir -p /root/certimate_backup

# 从旧容器复制数据到宿主机
docker cp ssl_xu:/app/pb_data /root/certimate_backup/

# 验证数据是否复制成功
ls -la /root/certimate_backup/pb_data/

你应该能看到一些文件,比如 *.db 或数据文件。

第二步:停止并删除旧容器

bash

# 停止旧容器
docker stop ssl_xu

# 删除旧容器(数据已备份,安全)
docker rm ssl_xu

第三步:用新镜像创建容器并挂载备份的数据

bash

docker run -d \
  --name certimate \
  --restart unless-stopped \
  -p 8090:8090 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /etc/timezone:/etc/timezone:ro \
  -v /root/certimate_backup/pb_data:/app/pb_data \
  certimate/certimate:latest

第四步:验证升级是否成功

  1. 访问 http://你的IP:8090
  2. 检查是否能正常登录,证书列表是否完整
  3. 如果一切正常,说明升级成功

第五步:清理旧镜像(可选)

bash

# 查看旧镜像
docker images | grep certissl

# 删除旧镜像(确认新容器运行正常后执行)
docker rmi certissl:latest

⚠️ 注意事项

  1. 备份数据是安全的docker cp 只是复制数据,不会影响旧容器运行,即使操作失败,旧容器还在。
  2. 如果新容器启动后看不到证书:检查 /root/certimate_backup/pb_data/ 目录下是否有文件,如果没有,说明备份路径不对,重新执行 docker cp 命令。
  3. 端口冲突:旧容器删除后,端口 8090 会释放,新容器可以正常使用。

**按顺序执行上述步骤即可完成升级。


转载请注明:小雨科技 _武汉网站建设_武汉小程序搭建 » Certimate升级迁移指南

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
⚡ 加速 by 陌小雨 | 业务联系QQ:274728691