
certbot/dns-digitalocean本镜像为 Electronic Frontier Foundation (EFF) 官方构建的 Certbot Docker 镜像,集成了 DigitalOcean DNS 插件。主要用于通过 DNS-01 挑战(DNS-01 challenge)自动化获取和续期 Let's Encrypt SSL/TLS 证书,适用于使用 DigitalOcean 作为 DNS 服务提供商的用户。
*.example.com)申请证书。*.example.com)或跨子域名批量申请证书。dns:edit 权限的个人访问令牌(Personal Access Token),用于操作 DNS 记录。以下示例通过 docker run 命令申请证书,使用环境变量传入 DigitalOcean API 令牌:
bashdocker run --rm \ -v /etc/letsencrypt:/etc/letsencrypt \ # 挂载证书存储目录(持久化证书和配置) -v /var/log/letsencrypt:/var/log/letsencrypt \ # 挂载日志目录 -e DO_API_TOKEN="your_digitalocean_api_token" \ # DigitalOcean API 令牌(必填) certbot/dns-digitalocean \ certonly \ # 仅申请证书(不自动配置服务器) --dns-digitalocean \ # 启用 DigitalOcean DNS 插件 --dns-digitalocean-token-env DO_API_TOKEN \ # 指定 API 令牌环境变量名 --email "***" \ # 管理员***(用于证书过期提醒) --agree-tos \ # 同意 Let's Encrypt 服务条款 --no-eff-email \ # 不向 EFF 发送邮件(可选) -d "example.com" \ # 目标域名(可重复 -d 参数添加多个域名) -d "*.example.com" # 通配符域名(需 DNS-01 挑战支持)
通过 docker-compose.yml 定义服务,实现证书申请与续期自动化:
yamlversion: '3' services: certbot: image: certbot/dns-digitalocean volumes: - ./letsencrypt:/etc/letsencrypt # 本地目录挂载,持久化证书和配置 - ./logs:/var/log/letsencrypt # 日志目录 - ./credentials:/etc/certbot/credentials # 凭证文件目录(可选,替代环境变量) environment: - TZ=Asia/Shanghai # 时区设置(可选) command: > certonly --dns-digitalocean --dns-digitalocean-credentials /etc/certbot/credentials/digitalocean.ini # 凭证文件路径 --email *** --agree-tos --non-interactive # 非交互式模式(适合脚本/定时任务) --keep-until-expiring # 仅在证书即将过期时续期 -d example.com -d *.example.com
凭证文件示例(./credentials/digitalocean.ini,需设置权限 chmod 600):
inidns_digitalocean_token = your_digitalocean_api_token
| 参数 | 说明 | 示例 |
|---|---|---|
certonly | 仅申请证书,不自动配置 Web 服务器 | certonly |
--email | 管理员***(用于证书通知) | --email *** |
--agree-tos | 同意 Let's Encrypt 服务条款 | --agree-tos |
--non-interactive | 非交互式运行(适合自动化脚本) | --non-interactive |
-d | 目标域名(可重复指定多个) | -d example.com -d test.com |
--dry-run | 测试模式(不实际申请证书) | --dry-run |
| 参数 | 说明 | 示例 |
|---|---|---|
--dns-digitalocean | 启用 DigitalOcean DNS 插件 | --dns-digitalocean |
--dns-digitalocean-token | 直接指定 DigitalOcean API 令牌(不推荐,明文暴露) | --dns-digitalocean-token "token" |
--dns-digitalocean-token-env | 从环境变量读取 API 令牌 | --dns-digitalocean-token-env DO_TOKEN |
--dns-digitalocean-credentials | 从文件读取 API 令牌(推荐,更安全) | --dns-digitalocean-credentials /path/to/ini |
--dns-digitalocean-propagation-seconds | DNS 记录传播等待时间(默认 10 秒) | --dns-digitalocean-propagation-seconds 30 |
dns:edit 权限,否则无法添加/删除 TXT 记录。600,仅 root 可读写)。volumes 挂载本地目录存储 /etc/letsencrypt,避免容器删除导致证书丢失。docker run --rm ... renew)定期执行证书续期,例如:
bash# 每日凌晨 3 点执行续期检查 0 3 * * * docker run --rm -v /etc/letsencrypt:/etc/letsencrypt certbot/dns-digitalocean renew --non-interactive
/var/log/letsencrypt 目录查看详细日志定位问题。



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务