🙋 用户
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 中,删除容器不影响证书和配置。
- 在宝塔面板的 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 项目通常通过可视化界面创建,直接复制命令行可能不生效。请按以下方式操作:
- 进入宝塔 Docker 面板 -> 容器列表,确认旧容器的具体端口映射和目录挂载路径(记下来)。
- 删除旧容器(注意:不要勾选“删除关联的挂载目录/数据卷”,只删容器)。
- 点击 创建容器:
- 镜像:填写
certimate/certimate:latest - 端口映射:填
8090:8090(或保持你原来的端口) - 挂载目录:添加两行
- 服务器目录:
/etc/localtime→ 容器目录:/etc/localtime(只读) - 服务器目录:
/etc/timezone→ 容器目录:/etc/timezone(只读) - 最关键:服务器目录填旧容器使用的
data绝对路径(例如/www/wwwroot/certimate/data) → 容器目录填/app/pb_data
- 点击提交。
第三步:验证升级是否成功
容器启动后,访问 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
第四步:验证升级是否成功
- 访问
http://你的IP:8090 - 检查是否能正常登录,证书列表是否完整
- 如果一切正常,说明升级成功
第五步:清理旧镜像(可选)
bash
# 查看旧镜像
docker images | grep certissl
# 删除旧镜像(确认新容器运行正常后执行)
docker rmi certissl:latest
⚠️ 注意事项
- 备份数据是安全的:
docker cp只是复制数据,不会影响旧容器运行,即使操作失败,旧容器还在。 - 如果新容器启动后看不到证书:检查
/root/certimate_backup/pb_data/目录下是否有文件,如果没有,说明备份路径不对,重新执行docker cp命令。 - 端口冲突:旧容器删除后,端口
8090会释放,新容器可以正常使用。
**按顺序执行上述步骤即可完成升级。
转载请注明:小雨科技 _武汉网站建设_武汉小程序搭建 » Certimate升级迁移指南






