无法在docker Ubuntu映像中安装软件包

Ram*_*jan 242 docker ubuntu-14.04

我在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
Run Code Online (Sandbox Code Playgroud)

如何解决这个错误?

ISa*_*ych 516

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

apt-get update
Run Code Online (Sandbox Code Playgroud)

在安装软件包之前,如果您的命令在Dockerfile中,那么您将需要:

apt-get -y install curl
Run Code Online (Sandbox Code Playgroud)

禁止使用命令的标准输出-qq.例如

apt-get -qq -y install curl
Run Code Online (Sandbox Code Playgroud)

  • -qq抑制在Dockerfile中通常不需要的输出.另一个不错的技巧 - 告诉debconf它在非交互式环境中工作:echo'debconf debconf/frontend select Noninteractive'| debconf的设置,选择 (6认同)
  • 出于某种原因,这对我不起作用,仍然是相同的"E:无法找到包裹......"的消息 (6认同)
  • @tblancog您也可以尝试apt-get update (4认同)

cre*_*ers 100

文档5月2018年:

例如,始终在同一 语句中结合RUN apt-get update使用apt-get installRUN

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

(......)

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

  • 您每年都会来这里编辑这个答案吗?只是好奇心:) (2认同)
  • 我愿意。表明答案仍然是最新的。 (2认同)

Gou*_*gla 11

在Dockerfile中添加以下命令:

RUN apt-get update
Run Code Online (Sandbox Code Playgroud)


bec*_*man 10

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

所以,这对我有用:

停止系统中的所有 Docker 容器

docker stop $(sudo docker ps -aq) 
Run Code Online (Sandbox Code Playgroud)

移除所有悬挂的容器

docker container prune 
Run Code Online (Sandbox Code Playgroud)

删除所有悬空图像

docker image prune 
Run Code Online (Sandbox Code Playgroud)

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


Con*_*nor 7

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

RUN apt-get update \
    && apt-get -y install curl \
    another-package
Run Code Online (Sandbox Code Playgroud)

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