Docker构建时add-apt-repository报错“keyserver receive failed: No name”求助
解决公司代理环境下add-apt-repository密钥获取失败的问题
我之前在公司代理环境里构建Docker镜像时,也碰到过和你完全一样的问题!结合我的踩坑经验,给你几个亲测有效的解决思路:
1. 给APT单独配置代理
系统层面的HTTP_PROXY环境变量有时候不会被APT工具(包括add-apt-repository和apt-key)识别到,所以需要单独给APT设置代理:
- 创建APT代理配置文件:
echo 'Acquire::http::Proxy "http://10.xxx.y.zzz:3128/";' > /etc/apt/apt.conf.d/95proxies echo 'Acquire::https::Proxy "http://10.xxx.y.zzz:3128/";' >> /etc/apt/apt.conf.d/95proxies - 配置完成后,再重新尝试执行
add-apt-repository ppa:ubuntugis/ppa,大概率能解决密钥获取的问题。
2. 手动导入PPA密钥(绕过密钥服务器)
如果代理拦截了密钥服务器的HKP协议请求(默认11371端口,很多公司代理会封禁),可以手动导入密钥:
- 在能访问外网的机器上导出密钥:
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 226213AA gpg --export --armor 226213AA > ubuntugis.key - 将密钥文件复制到Docker容器内(可以用
docker cp命令,或者在Dockerfile里ADD/COPY) - 在容器内导入密钥:
apt-key add ubuntugis.key - 直接添加PPA源到sources.list(不用
add-apt-repository):# 先查看系统版本,比如focal、jammy UBUNTU_VERSION=$(lsb_release -cs) echo "deb http://ppa.launchpad.net/ubuntugis/ppa/ubuntu ${UBUNTU_VERSION} main" >> /etc/apt/sources.list echo "deb-src http://ppa.launchpad.net/ubuntugis/ppa/ubuntu ${UBUNTU_VERSION} main" >> /etc/apt/sources.list
3. 指定密钥服务器的HTTP端口
如果不想手动导密钥,试试给apt-key指定用80端口的密钥服务器(代理通常会放行80端口的请求):
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 226213AA
为什么之前的方法无效?
你之前尝试的密钥服务器请求失败,大概率是因为:
- 公司代理封禁了密钥服务器默认的11371端口(HKP协议端口)
apt-key和add-apt-repository没有读取到系统的代理环境变量,导致请求没走代理
内容的提问来源于stack exchange,提问作者Marvin
相关产品推荐
相关产品推荐

