Amazon Linux 2 Docker容器内运行yum报SSL证书无法获取本地颁发者错误
报错说明
在基于最新amazonlinux镜像构建的Docker容器内执行任意yum命令(如yum update、yum install)时会触发以下错误:
failure: repodata/repomd.xml from amzn2-core: [Errno 256] No more mirrors to try. https://cdn.amazonlinux.com/2/core/2.0/x86_64/f915d0987d73328ab3992d03ddbce189bca8804de19d89f09b847dfcaa6bc1af/repodata/repomd.xml?instance_id=URLError®ion=unknown: [Errno 14] curl#60 - "SSL certificate problem: unable to get local issuer certificate"
触发原因
本质是yum请求亚马逊Linux软件源时SSL证书校验失败,常见触发场景有两个:
- 容器内置的
ca-certificates根证书包版本过旧,没有收录亚马逊源的证书颁发机构根证书 - 工作网络存在SSL中间人代理(比如公司内网防火墙、自建网络代理),代理替换了网站的SSL证书,系统不信任代理的根证书
解决方案
分不同场景选择对应处理方式:
- 临时快速验证:临时关闭yum的SSL校验
执行命令修改yum配置:sed -i 's/^sslverify=1/sslverify=0/g' /etc/yum.conf
验证yum可用后,优先执行yum update -y ca-certificates更新根证书包,更新完成后建议执行sed -i 's/^sslverify=0/sslverify=1/g' /etc/yum.conf恢复校验,避免安全风险。 - 内网代理场景永久修复:
- 将内网代理的根证书文件(格式为.crt或.pem)复制到容器内的
/etc/pki/ca-trust/source/anchors/目录 - 执行命令更新系统信任的证书库:
update-ca-trust extract - 重新执行yum命令即可正常使用
- 将内网代理的根证书文件(格式为.crt或.pem)复制到容器内的
- 镜像构建阶段提前修复:
在Dockerfile中加入对应逻辑,避免每次启动容器手动处理:FROM amazonlinux:latest # 若存在内网代理证书,先复制证书到容器内 COPY your-internal-root.crt /etc/pki/ca-trust/source/anchors/ RUN sed -i 's/^sslverify=1/sslverify=0/g' /etc/yum.conf && \ yum install -y ca-certificates && \ update-ca-trust extract && \ sed -i 's/^sslverify=0/sslverify=1/g' /etc/yum.conf - 无代理场景的简单修复:
若确认网络没有代理,可尝试重新拉取最新的官方amazonlinux镜像后重新构建容器:docker pull amazonlinux:latest
内容的提问来源于stack exchange,提问作者jspinella
相关产品推荐
相关产品推荐

