Skip to content
Docker 部署环境下的 SSL 证书更新与热重载实战

随着免费 SSL 证书(如 TrustAsia、Let's Encrypt 等)的有效期缩短(通常为 90 天),定期续期和替换证书成为了运维日常。在前端或 Web 应用通过 Docker 容器化部署的场景下,如何快速定位证书路径、替换证书并无缝热重载?本文总结完整实战流程。

一、域名所有权 DNS TXT 验证

在云平台申请免费 SSL 证书时,若选择 DNS 验证方式,需要前往 DNS 解析控制台为域名添加或更新一条 TXT 记录:

  • 主机记录_dnsauth.api(针对 api.example.com 子域名)
  • 记录类型TXT
  • 记录值:填写云厂商生成的专属校验哈希串(如 20260816xxxx...

提示

若之前申请过证书,DNS 列表中可能存在旧的 _dnsauth.api TXT 记录,直接点击修改更新为最新的记录值即可,无需重复添加。验证签发完成后可自行保留或删除。

二、定位 Docker 容器内的证书路径

当证书签发并下载好 Nginx 格式的证书压缩包后,需要确定服务器上证书存放的具体位置。

1. 查看正在运行的 Web 容器

bash
docker ps

找到运行 Nginx / 前端服务的容器(如 app-web)。

2. 检查 Nginx 配置中的证书路径

直接在容器内部执行配置检测与过滤命令:

bash
docker exec -it app-web nginx -T | grep -E "ssl_certificate"

终端通常会输出具体的证书挂载或存放路径:

nginx
ssl_certificate /etc/nginx/ssl/api.pem;
ssl_certificate_key /etc/nginx/ssl/api.key;

三、证书替换与热重载生效

1. 准备新证书文件

将下载的证书解压,按容器内配置的文件名重命名(例如):

  • api.example.com_bundle.crt(或 .pem)重命名为 api.pem
  • api.example.com.key 重命名为 api.key

2. 将证书文件拷贝入容器

将重命名后的证书文件上传至服务器宿主机,随后使用 docker cp 复制进容器覆盖旧证书:

bash
# 复制证书公钥
docker cp api.pem app-web:/etc/nginx/ssl/api.pem

# 复制证书私钥
docker cp api.key app-web:/etc/nginx/ssl/api.key

3. 热重载 Nginx(零停机)

执行平滑重载命令,让 Nginx 重新加载证书,无需重启整个容器:

bash
docker exec -it app-web nginx -s reload

四、验证证书生效状态

无需等待浏览器缓存刷新,直接在服务器终端使用 OpenSSL 命令检测 443 端口当前加载的证书有效期:

bash
echo | openssl s_client -servername api.example.com -connect 127.0.0.1:443 2>/dev/null | openssl x509 -noout -dates

输出示例

text
notBefore=Aug 17 00:00:00 2026 GMT
notAfter=Nov 14 23:59:59 2026 GMT

notAfter 显示为最新的到期日期时,说明新证书已正式生效,客户端与前端的 HTTPS 安全调用已恢复正常。