
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
!Let's Encrypt Logo
基于letsencrypt基础镜像构建的Let's Encrypt证书自动获取与续期工具,通过webroot验证方式管理SSL证书。
本镜像提供了一种简单高效的方式,通过Let's Encrypt自动获取和续期SSL证书,采用webroot验证方式(即通过Web服务器的特定目录进行域名所有权验证)。适用于需要为Web服务(如Nginx、Apache等)配置HTTPS且希望自动管理证书生命周期的场景,避免手动操作证书续期的繁琐流程。
首先需配置Web服务器,确保其能正确响应/.well-known/acme-challenge路径的请求。以Nginx为例,添加如下配置:
nginxlocation '/.well-known/acme-challenge' { default_type "text/plain"; # 设置默认MIME类型为纯文本 root /tmp/letsencrypt; # 指定验证文件存放目录(需与后续挂载路径一致) }
运行Web服务器容器时,需挂载两个卷以与letsencrypt-webroot容器共享:
bash-v /data/letsencrypt:/etc/letsencrypt # 存储证书的持久化目录 -v /data/letsencrypt-www:/tmp/letsencrypt # webroot验证目录(需与Web服务器配置的root一致)
执行以下命令启动证书管理容器,替换示例中的域名和***:
bashdocker run \ --name some-letsencrypt \ -v /data/letsencrypt:/etc/letsencrypt \ # 挂载证书存储目录 -v /data/letsencrypt-www:/tmp/letsencrypt \ # 挂载webroot验证目录 -e 'DOMAINS=example.com www.example.com' \ # 需申请证书的域名(空格分隔多个域名) -e 'EMAIL=your@email.tld' \ # 用于紧急通知和密钥恢复的邮箱 -e 'WEBROOT_PATH=/tmp/letsencrypt' \ # webroot验证目录路径(需与Web服务器配置一致) kvaps/letsencrypt-webroot
证书生成后,应用可通过以下路径访问证书文件:
/etc/letsencrypt/live/example.com/privkey.pem/etc/letsencrypt/live/example.com/cert.pem/etc/letsencrypt/live/example.com/chain.pem/etc/letsencrypt/live/example.com/fullchain.pem注意:必须完整挂载
/etc/letsencrypt目录,不可仅挂载/etc/letsencrypt/live子目录,否则该目录下证书文件的符号链接将无法正常工作!
可配置证书续期后的触发动作(如重载服务配置),实现依赖服务的自动更新。
挂载Docker Socket:需将主机的Docker Socket挂载到容器,以允许操作其他容器:
bash-v /var/run/docker.sock:/var/run/docker.sock
链接目标容器:通过--link参数链接需要操作的服务容器(如Nginx):
bash--link some-nginx # "some-nginx"为目标容器名称
设置续期钩子环境变量:通过LE_RENEW_HOOK环境变量定义触发动作,支持以下示例:
bash-e 'LE_RENEW_HOOK=docker kill -s HUP @CONTAINER_NAME@'
bash-e 'LE_RENEW_HOOK=docker restart @CONTAINER_NAME@'
注:
@CONTAINER_NAME@会自动替换为通过--link指定的容器名称。
以下是结合Nginx和letsencrypt-webroot的完整Docker Compose配置示例:
docker-compose.yml
yamlnginx: restart: always # 容器退出时自动重启 image: nginx # 使用官方Nginx镜像 hostname: example.com # 主机名(需替换为实际域名) volumes: - /etc/localtime:/etc/localtime:ro # 同步主机时间 - ./nginx:/etc/nginx:ro # 挂载本地Nginx配置(只读) - ./letsencrypt/conf:/etc/letsencrypt # 共享证书目录 - ./letsencrypt/html:/tmp/letsencrypt # 共享webroot验证目录 ports: - 80:80 # HTTP端口(用于证书验证) - 443:443 # HTTPS端口 environment: - LE_RENEW_HOOK=docker kill -s HUP @CONTAINER_NAME@ # Nginx重载钩子(示例) letsencrypt: restart: always # 容器退出时自动重启 image: kvaps/letsencrypt-webroot # 当前letsencrypt镜像 volumes: - /etc/localtime:/etc/localtime:ro # 同步主机时间 - /var/run/docker.sock:/var/run/docker.sock # 挂载Docker Socket以操作其他容器 - ./letsencrypt/conf:/etc/letsencrypt # 证书存储目录(与Nginx共享) - ./letsencrypt/html:/tmp/letsencrypt # webroot验证目录(与Nginx共享) links: - nginx # 链接Nginx容器,用于续期钩子 environment: - DOMAINS=example.com www.example.com # 需申请证书的域名(空格分隔,替换为实际域名) - EMAIL=your@email.tld # 联系邮箱(替换为实际邮箱) - WEBROOT_PATH=/tmp/letsencrypt # webroot验证目录(需与Nginx配置一致) - EXP_LIMIT=30 # 证书到期前30天开始尝试续期(默认值) - CHECK_FREQ=30 # 每30天检查一次证书状态(默认值)
支持单次运行模式,即执行一次证书更新后立即退出容器,适用于通过外部定时任务(如Cron)触发的场景。只需在docker run命令末尾添加once参数:
bashdocker run \ --name some-letsencrypt \ -v /data/letsencrypt:/etc/letsencrypt \ -v /data/letsencrypt-www:/tmp/letsencrypt \ -e 'DOMAINS=example.com www.example.com' \ -e 'EMAIL=your@email.tld' \ -e 'WEBROOT_PATH=/tmp/letsencrypt' \ kvaps/letsencrypt-webroot \ once # 单次运行模式
| 环境变量 | 说明 | 示例值 | 默认值 |
|---|---|---|---|
DOMAINS | 需申请证书的域名列表(空格分隔多个域名) | example.com www.example.com | 无(必填) |
EMAIL | 联系***,用于接收证书到期通知及密钥恢复 | your@email.tld | 无(必填) |
WEBROOT_PATH | webroot验证目录路径(需与Web服务器配置的root一致) | /tmp/letsencrypt | /tmp/letsencrypt |
CHOWN | 证书文件的所有者(用户:组) | www-data:www-data | root:root |
CHMOD | 证书文件的权限(八进制格式) | 600 | 644 |
EXP_LIMIT | 证书到期前多少天开始尝试续期(整数) | 30 | 30 |
CHECK_FREQ | 证书续期检查频率(天数,整数) | 30 | 30 |
LE_RENEW_HOOK | 证书续期后的触发动作(需配合Docker Socket和--link使用) | docker restart @CONTAINER_NAME@ | 无 |
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。





来自真实用户的反馈,见证轩辕镜像的优质服务