无法在docker Ubuntu镜像中安装包

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

如何修复这个错误?

292083 次浏览

因为映像中没有包缓存,所以需要运行:

apt-get update

在安装包之前,如果你的命令在Dockerfile中,你需要:

apt-get -y install curl

要抑制命令的标准输出,请使用-qq。如。

apt-get -qq -y install curl

在Dockerfile中增加如下命令:

RUN apt-get update

May 2017 2018 2019 2020 2021 2022中的文档

总是将RUN apt-get updateapt-get install组合在同一个语句中 RUN语句,例如

RUN apt-get update && apt-get install -y package-bar

(…)

RUN语句中单独使用apt-get update会导致缓存

.问题和后续apt-get install指令失败

(…)

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

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

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

这是修复语法错误和添加apt-get update的组合,为我解决了这个问题。

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

$ sudo apt-get update
$ sudo apt-get install <package_name>

我发现,当“apt-get update”运行时,在/tmp上挂载本地卷可能会导致权限问题,这会阻止包缓存被填充。希望这不是大多数人会做的事情,但如果遇到这个问题,这是另一个值得注意的问题。

当我试图安装jre时,我也遇到了同样的问题 而且 我试着用“apt-get update”命令;然后 尝试“apt install default- jrequot;再一次

希望它能帮到你,好运!

运行apt-get更新并没有为我解决这个问题,因为,它似乎总是从缓存读取这个命令的结果,不知何故,缓存似乎已经损坏。我怀疑,如果你有多个docker容器具有相同的“基本映像”(对我来说是python:3.8-slim),就会发生这种情况。

所以,以下是对我有用的方法:

停止系统中的所有Docker容器

docker stop $(sudo docker ps -aq)

移除悬挂的容器

docker container prune

删除所有悬空图像

docker image prune

运行这些命令后,docker构建似乎丢失了损坏的缓存,并执行一个干净的apt-get更新,以获取正确的包信息和包的安装进度。

当我试图在Dockerfile中安装cron和nginx-extras时,我得到了同样的错误。到目前为止,所有的答案我都试过了,没有结果。

然后我就跑了 sudo service docker restart 这为我解决了问题。

这个问题已经得到了回答,但我早些时候遇到了这个问题,这些步骤都不起作用。

事实证明,问题是我在一个单独的文件中保存了一个要安装的包列表。这是保存在windows机器上的CRLF行分隔符(\r\n而不仅仅是\n)。在已接受的答案中提供的步骤之上强制将行结束符仅设置为\n就解决了这个问题。

我突然就遇到了这个问题。我先这么做了,这似乎解决了问题:

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