无法在 docker Ubuntu 映像中安装软件包[已关闭]

问题描述 投票:0回答:11

我在 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

如何修复这个错误?

docker ubuntu-14.04
11个回答
961
投票

是因为镜像中没有包缓存,需要运行:

apt-get update

在安装软件包之前,如果您的命令位于 Dockerfile 中,则您需要:

apt-get -y install curl

要抑制命令的标准输出,请使用

-qq
。例如

apt-get -qq -y install curl

236
投票

摘自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
指令失败。

(...)

使用

RUN apt-get update && apt-get install -y
可确保您的 Dockerfile 安装最新的软件包版本,无需进一步编码或手动干预。这种技术称为“缓存清除”。


22
投票

在 Dockerfile 中添加以下命令:

RUN apt-get update

12
投票

确保 Dockerfile 中没有任何语法错误,因为这也可能导致此错误。正确的例子是:

RUN apt-get update \
    && apt-get -y install curl \
    another-package

修复语法错误和添加

apt-get update
的结合为我解决了问题。


10
投票

运行 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,它获取正确的包信息并且包安装进度按预期进行。


4
投票

我发现在 /tmp 上挂载本地卷可能会在“apt-get update”运行时导致权限问题,从而阻止填充包缓存。希望这不是大多数人所做的事情,但如果您看到此问题,则需要寻找其他内容。


2
投票

突然我开始遇到这个问题。我先这样做了,似乎解决了问题:

RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*

1
投票

尝试在 Dockerfile 中安装 cron 和 nginx-extras 时,我遇到了同样的错误。到目前为止,我尝试了所有答案,但没有骰子。

然后我就跑了

sudo service docker restart
这为我解决了这个问题。


1
投票

此问题已得到解答,但我之前遇到过此问题,但这些步骤都不起作用。

事实证明,问题在于我保存了要安装在单独文件中的软件包列表。这是保存在带有 CRLF 行分隔符的 Windows 机器上( 不仅仅是 )。强制行结尾仅 在接受的答案中提供的步骤之上解决了问题。


-1
投票

我在尝试安装jre时遇到了同样的问题 和 我尝试命令“apt-get update”然后 再次尝试“apt install default-jre” 它起作用了!

希望对你有帮助,祝你好运!


-4
投票

您需要更新 Ubuntu 中的软件包列表:

$ sudo apt-get update
$ sudo apt-get install <package_name>
© www.soinside.com 2019 - 2024. All rights reserved.