我在 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 月的 docs 2017 2018 2019 2020 2021 2022
始终在同一 RUN 语句中将 RUN apt-get update 与 apt-get install 结合使用,例如 RUN apt-get update && apt-get install -y package-bar (...) 在 RUN 语句中单独使用 apt-get update导致缓存问题和后续的 apt-get 安装指令失败。 (...) 使用 RUN apt-get update && apt-get install -y 可确保您的 Dockerfile 安装最新的软件包版本,无需进一步编码或手动干预。这种技术被称为“缓存清除”。
在 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 build 似乎丢失了损坏的缓存并执行了干净的 apt-get 更新,该更新获取了正确的包信息,并且包安装按预期进行。
我发现当“apt-get update”运行时,在 /tmp 上安装本地卷会导致权限问题,这会阻止包缓存被填充。希望这不是大多数人所做的事情,但是如果您看到此问题,则需要寻找其他东西。
当我尝试安装 jre 时遇到了同样的问题,我尝试了命令“apt-get update”,然后再次尝试“apt install default-jre”,它成功了!
我希望它可以帮助你,祝你好运!
尝试在我的 Dockerfile 中安装 cron 和 nginx-extras 时遇到同样的错误。到目前为止,我尝试了所有答案,但没有骰子。
然后我简单地运行 sudo service docker restart
为我解决了这个问题。
您需要更新 Ubuntu 中的软件包列表:
$ sudo apt-get update
$ sudo apt-get install <package_name>
不定期副业成功案例分享
docker image prune
以释放空间并为我修复它。