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

Docker构建镜像报错:无法定位软件包 命令返回非零代码100

Docker构建Ubuntu镜像报"Unable to locate package"错误排查

问题复现

执行如下命令构建自定义镜像时持续报错:

sudo docker build -t docker-custom-app .

初始使用的Dockerfile内容如下:

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get upgrade -y &&\
apt-get install -y curl &&\
apt-get install -y python3 &&\
apt-get install -y python3-pip &&\
pip install flask &&\
pip install flask-mysql

COPY . /opt/source-code

ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run

首次构建返回核心报错:

E: Unable to locate package curl
The command '/bin/sh -c apt-get update && apt-get upgrade -y &&apt-get install -y curl &&apt-get install -y python3 &&apt-get install -y python3-pip &&pip install flask &&pip install flask-mysql' returned a non-zero code: 100

后续多次调整RUN指令的软件包安装顺序、安装列表,先后测试两类配置:

  • 第一类调整后配置
    RUN apt-get update && apt-get upgrade -y &&\
    apt-get install -y software-properties-common &&\
    pip install flask &&\
    pip install flask-mysql
    
    构建报错:E: Unable to locate package software-properties-common,RUN指令返回非零代码100。
  • 第二类调整后配置
    RUN apt-get update && apt-get upgrade -y &&\
    apt-get install -y python3 &&\
    apt-get install -y software-properties-common &&\
    pip install flask &&\
    pip install flask-mysql
    
    构建报错:E: Unable to locate package python3,RUN指令同样返回非零代码100。

所有调整均触发「无法定位目标软件包、命令返回非零代码100」的同类错误。

根因与解决方案

该类报错的核心原因是 apt-get update步骤未成功拉取到Ubuntu软件源的包索引文件,导致后续执行apt install时系统无法匹配到对应安装包,和调整安装顺序、更换安装包的操作没有直接关系,按以下优先级排查即可:

  • 优先排查构建网络问题
    国内网络环境下默认Ubuntu官方源服务器在海外,大概率出现连接超时、索引下载失败的问题。构建时可以先加宿主机网络参数测试:
    sudo docker build --network=host -t docker-custom-app .
    
    如果加了参数能正常构建,说明是默认桥接网络的连通性问题,可以直接修改Docker配置指定公共DNS:编辑/etc/docker/daemon.json写入如下配置,重启Docker服务后再构建:
    {
      "dns": ["114.114.114.114", "8.8.8.8"]
    }
    
    重启命令:sudo systemctl daemon-reload && sudo systemctl restart docker
  • 替换软件源为国内镜像(国内环境必做)
    不要依赖默认的官方源,在apt操作前直接替换为国内高校、云厂商维护的镜像源,从根源避免网络问题。同时优化Dockerfile写法,合并安装命令、清理无用缓存减小镜像体积,修正后可直接使用的Dockerfile参考:
    FROM ubuntu:22.04
    
    ENV DEBIAN_FRONTEND=noninteractive
    # 替换Ubuntu软件源为国内镜像
    RUN sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list &&\
        sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list &&\
        apt-get update && apt-get upgrade -y &&\
        # 合并所有apt包安装命令,加--no-install-recommends减少无关依赖
        apt-get install -y --no-install-recommends curl python3 python3-pip &&\
        # pip换国内源安装Python依赖
        pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple flask flask-mysql &&\
        # 清理apt缓存,减小镜像体积
        apt-get clean && rm -rf /var/lib/apt/lists/*
    
    COPY . /opt/source-code
    # flask默认监听127.0.0.1,加--host=0.0.0.0允许容器外部访问
    ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run --host=0.0.0.0
    
  • 注意不要把apt-get update和后续的apt install拆成多个独立RUN指令,否则会因为Docker的镜像层缓存机制,导致后续构建时复用旧的、失效的源索引缓存,同样会触发找不到包的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:06:21