Docker Registry配置Let's Encrypt报错:旧ACME API已弃用
Docker Registry 配置Let's Encrypt报错及解决方案
首先明确:Docker Registry项目没有被弃用,只是官方registry:2镜像内置的Let's Encrypt客户端仍在调用已废弃的ACME v1接口(acme-v01.api.letsencrypt.org),导致域名解析失败并触发报错。
解决办法
1. 手动指定ACME v2接口地址
通过环境变量REGISTRY_HTTP_TLS_LETSENCRYPT_SERVER强制使用当前有效的ACME v2端点,同时挂载本地目录解决容器内缓存文件写入权限问题:
docker run -d -p 443:5000 --name registry \ -v /your/local/cache/dir:/etc/docker/registry \ -e REGISTRY_HTTP_TLS_LETSENCRYPT_CACHEFILE=/etc/docker/registry/letsencrypt.json \ -e REGISTRY_HTTP_TLS_LETSENCRYPT_EMAIL=admin@example.com \ -e REGISTRY_HTTP_TLS_LETSENCRYPT_SERVER=https://acme-v02.api.letsencrypt.org/directory \ registry:2
替换
/your/local/cache/dir为你本地的实际目录,确保容器有写入权限。
2. 提前手动获取证书后挂载使用
放弃内置的自动证书获取功能,用certbot等工具手动生成Let's Encrypt证书,再挂载到容器中:
docker run -d -p 443:5000 --name registry \ -v /path/to/your/certs:/certs \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \ -e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \ registry:2
确保
/path/to/your/certs目录下存在fullchain.pem(证书链)和privkey.pem(私钥)文件。
3. 自行构建更新后的Registry镜像
如果需要长期使用内置的自动证书功能,可以从官方代码仓库拉取最新代码,修改默认ACME接口地址后自行构建镜像,确保适配最新的Let's Encrypt规范。
内容的提问来源于stack exchange,提问作者Kwiatko
相关产品推荐
相关产品推荐

