无法在Docker Ubuntu映像内安装软件包


289

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

如何解决这个错误?

Answers:


620

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

apt-get update

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

apt-get -y install curl

要取消命令的标准输出,请使用-qq。例如

apt-get -qq -y install curl

1
这对我有用,我应该一直运行-qq
开发人员

6
-qq抑制您通常在Dockerfile中不需要的输出。另一个不错的技巧-告诉debconf它在非交互式环境中工作:echo'debconf debconf / frontend select Noninteractive'| debconf-set-selections
ISanych 2014年

7
由于某种原因,这对我不起作用,仍然是“ E:无法找到包裹..”消息
tblancog

“ apt-get-update”和“ apt-get install curl”工作正常!
Sindhu

我发现当空间不足时,泊坞窗中也会发生此错误。我跑来docker image prune腾出空间,这对我来说是固定的。
乔纳森·赖斯

123

文档5月2017年 2018年 2019年 2020年

始终RUN apt-get updateapt-get installRUN一条语句结合使用,例如

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

(...)

apt-get updateRUN语句中单独使用会导致缓存问题,并且后续apt-get install指令会失败。

(...)

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



4

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

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

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


1

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


-3

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

$ sudo apt-get update
$ sudo apt-get install <package_name>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.