Dockerfile构建镜像时无法安装指定软件包求助
解决Ubuntu 18.04 Docker镜像中apt-get无法找到软件包的问题
问题描述
构建flask_objectdetection镜像时,执行命令docker build -t flask_objectdetection .,在运行apt-get install -y python3-pip python3-dev libsm6 libxext6 libxrender-dev libgl1-mesa-glx步骤时,所有指定软件包均提示无法找到,且apt-get update步骤被Docker缓存,没有重新执行。
问题根源
Ubuntu 18.04已停止官方支持(EOL),默认软件源已失效,导致apt-get update无法获取有效包列表;同时Docker缓存了旧的update结果,即使源有问题也不会重新拉取。
修复方案
方案1:替换Ubuntu 18.04归档源并合并指令
修改Dockerfile,替换为官方归档源,同时将apt-get update和install合并为一个RUN指令,避免缓存问题:
FROM ubuntu:18.04 RUN echo "deb http://old-releases.ubuntu.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list && \ echo "deb http://old-releases.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list && \ echo "deb http://old-releases.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list && \ apt-get update -y && \ apt-get install -y python3-pip python3-dev libsm6 libxext6 libxrender-dev libgl1-mesa-glx WORKDIR /code COPY . /code
方案2:切换到长期支持的Python基础镜像
直接使用维护中的Python镜像(如Debian-based版本),默认已包含Python和pip,只需安装所需系统库:
FROM python:3.8-bullseye RUN apt-get update -y && \ apt-get install -y libsm6 libxext6 libxrender-dev libgl1-mesa-glx WORKDIR /code COPY . /code
方案3:清理缓存重新构建
执行构建时添加--no-cache参数,强制Docker重新执行所有步骤:
docker build --no-cache -t flask_objectdetection .
内容的提问来源于stack exchange,提问作者UbuntuWorker
相关产品推荐
相关产品推荐

