
jonasal/nginx-certbotdocker-nginx-certbot 是一个集成了 Nginx 和 Certbot 的 Docker 镜像,旨在简化 HTTPS 部署流程。该镜像实现了自动化获取、配置和续期 Let's Encrypt SSL 证书,无需手动干预证书管理,让用户能够快速搭建支持 HTTPS 的 Web 服务。
bashdocker run -d \ --name nginx-certbot \ -p 80:80 \ -p 443:443 \ -e "DOMAINS=example.com [***]" \ -e "EMAIL=***" \ -v ./nginx/conf.d:/etc/nginx/conf.d \ -v ./certbot/conf:/etc/letsencrypt \ -v ./certbot/www:/var/www/certbot \ jonasal/nginx-certbot
-p 80:80:映射 HTTP 端口(Let's Encrypt 验证需通过 80 端口)-p 443:443:映射 HTTPS 端口-e "DOMAINS=...":指定需要申请证书的域名,多个域名用空格分隔-e "EMAIL=...":Let's Encrypt 注册***(用于证书过期通知及恢复)./nginx/conf.d:本地 Nginx 配置目录,映射到容器内 /etc/nginx/conf.d./certbot/conf:本地证书存储目录,映射到容器内 /etc/letsencrypt(持久化证书)./certbot/www:Let's Encrypt 验证文件目录,映射到容器内 /var/www/certbot创建 docker-compose.yml 文件:
yamlversion: '3' services: nginx-certbot: image: jonasal/nginx-certbot container_name: nginx-certbot ports: - "80:80" - "443:443" environment: - DOMAINS=example.com [***] - EMAIL=*** - STAGING=0 # 1 启用测试环境(避免 Let's Encrypt 速率限制),0 禁用 volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./certbot/conf:/etc/letsencrypt - ./certbot/www:/var/www/certbot restart: unless-stopped
启动服务:
bashdocker-compose up -d
| 环境变量 | 说明 | 默认值 |
|---|---|---|
DOMAINS | 需申请证书的域名,多个域名用空格分隔(必填) | 无 |
EMAIL | Let's Encrypt 注册***(用于证书通知及恢复,必填) | 无 |
STAGING | 是否使用 Let's Encrypt 测试环境(1=启用,0=禁用) | 0 |
CERTBOT_ARGS | 传递给 Certbot 的额外参数(如 --rsa-key-size 4096 指定密钥长度) | 无 |
RENEW_BEFORE | 证书到期前多少天开始续期(单位:天) | 30 |
NGINX_CONF | 自定义 Nginx 主配置文件路径(容器内路径) | /etc/nginx/nginx.conf |
./ ├── docker-compose.yml ├── nginx/ │ └── conf.d/ # Nginx 站点配置目录(需手动创建) │ └── example.conf # 自定义站点配置文件 └── certbot/ ├── conf/ # 证书存储目录(自动生成) └── www/ # Let's Encrypt 验证文件目录(自动生成)
./nginx/conf.d:/etc/nginx/conf.d:挂载自定义 Nginx 站点配置,需提前创建并添加站点配置文件(示例见下文)./certbot/conf:/etc/letsencrypt:持久化存储 Let's Encrypt 证书文件,避免容器重建后证书丢失./certbot/www:/var/www/certbot:Let's Encrypt ACME 验证文件存放目录,用于域名所有权验证./nginx/conf.d/example.conf)nginxserver { listen 80; server_name example.com [***] # 将 HTTP 请求重定向到 HTTPS location / { return 301 [***] } # Let's Encrypt 验证文件访问路径 location /.well-known/acme-challenge/ { root /var/www/certbot; } } server { listen 443 ssl; server_name example.com [***] # SSL 证书配置(证书由 Certbot 自动生成,路径固定) ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 推荐的 SSL 安全配置(可选) ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 网站根目录(根据实际需求修改) root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ =404; } }
若需为多个独立域名配置证书,可在 DOMAINS 中指定多个域名(空格分隔),并为每个域名创建对应的 Nginx 配置文件。例如:
yamlenvironment: - DOMAINS=example.com [***] blog.example.com
DOMAINS 中指定的域名/.well-known/acme-challenge/ 路径)/etc/letsencrypt/live/<主域名>/ 目录RENEW_BEFORE 天数(默认 30 天)时,自动执行续期操作DOMAINS 中指定的域名已正确解析至主机 IPSTAGING=1)可避免触发限制docker exec nginx-certbot nginx -s reload 使配置生效./certbot/conf 目录,防止证书文件丢失导致服务中断




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