You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建失败:Ubuntu软件仓库签名验证错误求助

解决Docker构建Ubuntu镜像时的仓库未签名错误

我之前在公司环境里也碰到过一模一样的问题,结合你的情况,给你几个实用的排查和解决步骤:

1. 先确认网络连通性与源的可访问性

错误提示里反复提到“网络是否需要身份验证”,优先从网络入手排查:

  • 在宿主机上直接测试访问Ubuntu官方源:
    curl -I http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease
    
    如果返回403或需要认证,那大概率是公司网络有代理或访问限制;如果宿主机能正常访问,那问题出在Docker容器的网络配置上。
  • 用nslookup security.ubuntu.com测试宿主机DNS是否能正确解析源地址,避免DNS污染导致的访问异常。

2. 替换Ubuntu源为国内镜像

官方源偶尔会出现访问不稳定或签名验证异常的情况,换成国内镜像(比如阿里云、清华镜像)通常能快速解决:
修改你的Dockerfile,在apt-get update前替换源,同时合并update和install命令减少镜像层数:

# syntax=docker/dockerfile:1
FROM ubuntu:20.04
# 替换为阿里云Ubuntu镜像源
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    apt-get update && apt-get install -y apt-utils curl nodejs postgresql-client

3. 重置本地基础镜像

有可能你本地缓存的ubuntu:20.04镜像已损坏,导致源配置异常:

# 删除旧的基础镜像
docker rmi ubuntu:20.04
# 重新拉取官方干净镜像
docker pull ubuntu:20.04
# 再次执行构建
docker build --tag my-ubuntu .

4. 检查宿主机系统时间

签名验证依赖正确的系统时间,如果宿主机时间偏差过大,会直接导致签名验证失败:

  • 查看当前系统时间:
    date
    
  • 如果时间不对,同步系统时间:
    sudo timedatectl set-ntp true
    

5. 配置Docker Daemon代理(针对受限网络)

如果你的网络必须通过代理才能访问外部资源,得给Docker守护进程配置代理:

  1. 创建/修改/etc/docker/daemon.json文件:
    {
      "proxies": {
        "default": {
          "httpProxy": "http://你的代理地址:端口",
          "httpsProxy": "http://你的代理地址:端口",
          "noProxy": "localhost,127.0.0.1,内部域名"
        }
      }
    }
    
  2. 重启Docker服务:
    sudo systemctl restart docker
    
  3. 重新执行构建命令。

你可以按顺序尝试这些方法,一般替换源或重置基础镜像就能解决大部分这类问题。

内容的提问来源于stack exchange,提问作者Oglop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:12:34