Docker构建执行apt-key命令报错,求解决方案(Windows11 Pro环境)
Docker构建时apt-key收密钥失败的解决方法
问题场景
使用以下Dockerfile构建镜像时出现错误:
FROM osgeo/gdal:ubuntu-small-3.6.3 RUN apt-get install --no-install-recommends -y gnupg RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C
构建日志报错:
=> [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 1.13kB 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/osgeo/gdal:ubuntu-small-3.6.3 4.8s => [auth] osgeo/gdal:pull token for registry-1.docker.io 0.0s => [ 1/13] FROM docker.io/osgeo/gdal:ubuntu-small-3.6.3@sha256:398d5aca0ca88295c13ada87e0f382ed409dac13a952461187be72ce3c376513 0.0s => [internal] load build context 0.1s => => transferring context: 106.80kB 0.0s => CACHED [ 2/13] RUN apt-get install --no-install-recommends -y gnupg 0.0s => ERROR [ 3/13] RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C ------ > [ 3/13] RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C: #7 0.565 Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). #7 0.586 Executing: /tmp/apt-key-gpghome.sBrxtWnhQq/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C #7 10.62 gpg: keyserver receive failed: Server indicated a failure ------ executor failed running [/bin/sh -c apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C]: exit code: 2
环境:Windows 11 Pro
解决办法
1. 更换密钥服务器
keyserver.ubuntu.com存在访问不稳定的情况,换成其他可靠的密钥服务器即可,比如MIT的服务器:
RUN gpg --keyserver hkp://pgp.mit.edu --recv-keys 871920D1991BC93C
也可以尝试hkp://keys.openpgp.org,这两个都是常用的公共密钥服务器。
2. 弃用apt-key,改用标准密钥存储方式
apt-key已经被官方弃用,正确的做法是将密钥导出到/usr/share/keyrings/目录下的密钥环文件,后续添加源时直接引用该文件。修改后的Dockerfile:
FROM osgeo/gdal:ubuntu-small-3.6.3 RUN apt-get update && apt-get install --no-install-recommends -y gnupg RUN gpg --keyserver hkp://pgp.mit.edu --recv-keys 871920D1991BC93C \ && gpg --export 871920D1991BC93C > /usr/share/keyrings/custom-archive-keyring.gpg
如果之后需要添加第三方软件源,要这样配置:
RUN echo "deb [signed-by=/usr/share/keyrings/custom-archive-keyring.gpg] 你的源地址 发行版代号 main" > /etc/apt/sources.list.d/custom.list
3. 检查Docker代理设置
如果Windows系统使用了代理,务必确保Docker Desktop的代理配置正确。打开Docker Desktop的设置,进入Resources -> Proxies,勾选"Manual proxy configuration",填入和系统一致的代理地址和端口,避免构建时网络请求被拦截。
4. 手动下载密钥再导入镜像
如果所有密钥服务器都无法访问,可以在本地提前下载密钥:
# 在Windows终端执行(需要安装gpg工具,可通过Chocolatey或WSL安装) gpg --keyserver hkp://pgp.mit.edu --recv-keys 871920D1991BC93C gpg --export 871920D1991BC93C > key.gpg
然后修改Dockerfile,把本地的密钥文件复制到镜像中:
FROM osgeo/gdal:ubuntu-small-3.6.3 RUN apt-get update && apt-get install --no-install-recommends -y gnupg COPY key.gpg /usr/share/keyrings/custom-archive-keyring.gpg
内容的提问来源于stack exchange,提问作者Arif
相关产品推荐
相关产品推荐

