我在 docker 上安装了 Ubuntu 14.04 映像。之后,当我尝试在 ubuntu 映像中安装软件包时,出现无法定位软件包错误:
apt-get install curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package curl
如何修复这个错误?
是因为镜像中没有包缓存,需要运行:
apt-get update
在安装软件包之前,如果您的命令位于 Dockerfile 中,则您需要:
apt-get -y install curl
要抑制命令的标准输出,请使用
-qq
。例如
apt-get -qq -y install curl
摘自5月20172018201920202021202220232024的文档
始终将
与RUN apt-get update
组合在一起apt-get install
声明,例如RUN
RUN apt-get update && apt-get install -y package-bar
(...)
在
语句中单独使用apt-get update
会导致缓存 问题和后续RUN
指令失败。apt-get install
(...)
使用
可确保您的 Dockerfile 安装最新的软件包版本,无需进一步编码或手动干预。这种技术称为“缓存清除”。RUN apt-get update && apt-get install -y
在 Dockerfile 中添加以下命令:
RUN apt-get update
确保 Dockerfile 中没有任何语法错误,因为这也可能导致此错误。正确的例子是:
RUN apt-get update \
&& apt-get -y install curl \
another-package
修复语法错误和添加
apt-get update
的结合为我解决了问题。
运行 apt-get update 并没有为我解决这个问题,因为它似乎总是从缓存中读取此命令的结果,并且不知何故缓存似乎已损坏。我怀疑,如果您有多个具有相同“基本映像”的 docker 容器(对我来说是 python:3.8-slim),就会发生这种情况。
所以,这对我有用:
停止系统中的所有 Docker 容器
docker stop $(sudo docker ps -aq)
移除所有悬挂的容器
docker container prune
删除所有悬挂图像
docker image prune
运行这些命令后,docker 构建似乎丢失了损坏的缓存并执行了干净的 apt-get update,它获取正确的包信息并且包安装进度按预期进行。
我发现在 /tmp 上挂载本地卷可能会在“apt-get update”运行时导致权限问题,从而阻止填充包缓存。希望这不是大多数人所做的事情,但如果您看到此问题,则需要寻找其他内容。
突然我开始遇到这个问题。我先这样做了,似乎解决了问题:
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*
尝试在 Dockerfile 中安装 cron 和 nginx-extras 时,我遇到了同样的错误。到目前为止,我尝试了所有答案,但没有骰子。
然后我就跑了
sudo service docker restart
这为我解决了这个问题。
此问题已得到解答,但我之前遇到过此问题,但这些步骤都不起作用。
事实证明,问题在于我保存了要安装在单独文件中的软件包列表。这是保存在带有 CRLF 行分隔符的 Windows 机器上( 不仅仅是 )。强制行结尾仅 在接受的答案中提供的步骤之上解决了问题。
我在尝试安装jre时遇到了同样的问题 和 我尝试命令“apt-get update”然后 再次尝试“apt install default-jre” 它起作用了!
希望对你有帮助,祝你好运!
您需要更新 Ubuntu 中的软件包列表:
$ sudo apt-get update
$ sudo apt-get install <package_name>