"apt-get update" 返回了一个非零代码: 100。

106
我会尽力为您翻译,以下是需要翻译的内容:

我正在尝试从具有以下内容的docker文件创建docker镜像:

FROM ubuntu:14.04.4
RUN echo 'deb http://private-repo-1.hortonworks.com/HDP/ubuntu14/2.x/updates/2.4.2.0 HDP main' >> /etc/apt/sources.list.d/HDP.list
RUN echo 'deb http://private-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/ubuntu14 HDP-UTILS main'  >> /etc/apt/sources.list.d/HDP.list
RUN echo 'deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/azurecore/ trusty main' >> /etc/apt/sources.list.d/azure-public-trusty.list
RUN gpg --keyserver pgp.mit.edu --recv-keys B9733A7A07513CAD
RUN gpg -a --export 07513CAD | apt-key add -
RUN gpg --keyserver pgp.mit.edu --recv-keys B02C46DF417A0893
RUN gpg -a --export 417A0893 | apt-key add -
RUN apt-get update

出现以下错误:

root@sbd-docker:~/ubuntu# docker build -t hdinsight .
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM ubuntu:14.04.4
 ---> 8f1bd21bd25c
Step 2 : RUN echo 'deb http://private-repo-1.hortonworks.com/HDP/ubuntu14/2.x/updates/2.4.2.0 HDP main' >> /etc/apt/sources.list.d/HDP.list
 ---> Using cache
 ---> bc23070c0b18
Step 3 : RUN echo 'deb http://private-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/ubuntu14 HDP-UTILS main'  >> /etc/apt/sources.list.d/HDP.list
 ---> Using cache
 ---> e45c32975e28
Step 4 : RUN echo 'deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/azurecore/ trusty main' >> /etc/apt/sources.list.d/azure-public-trusty.list
 ---> Using cache
 ---> 1659cdcab06e
Step 5 : RUN gpg --keyserver pgp.mit.edu --recv-keys B9733A7A07513CAD
 ---> Using cache
 ---> ca73b2bfcd21
Step 6 : RUN gpg -a --export 07513CAD | apt-key add -
  ---> Using cache
  ---> 95596ad10bc9
Step 7 : RUN gpg --keyserver pgp.mit.edu --recv-keys B02C46DF417A0893
 ---> Using cache
 ---> f497deeef5b5
Step 8 : RUN gpg -a --export 417A0893 | apt-key add -
 ---> Using cache
 ---> d01dbe7fa02e
Step 9 : RUN apt-get update
 ---> Running in 89d75799982f
E: The method driver /usr/lib/apt/methods/https could not be found.
The command '/bin/sh -c apt-get update' returned a non-zero code: 100
root@sbd-docker:~/ubuntu#

我正在使用 Ubuntu 14.04.4

我尝试重新启动docker,清理所有docker镜像,安装 apt-transport-https,但仍然无法解决问题。

我不知道出了什么问题。


7
考虑合并多个运行命令,以减少在后端创建的层数。 - BMitch
@BMitch 这是什么意思?你能详细解释一下吗?谢谢。 - jjstcool
2
@jjstcool https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#minimize-the-number-of-layers请尽量减少层的数量。 - BMitch
11个回答

105

因为您有一个https源。在执行更新之前,请安装apt-transport-https

FROM ubuntu:14.04.4
RUN apt-get update && apt-get install -y apt-transport-https
RUN echo 'deb http://private-repo-1.hortonworks.com/HDP/ubuntu14/2.x/updates/2.4.2.0 HDP main' >> /etc/apt/sources.list.d/HDP.list
RUN echo 'deb http://private-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/ubuntu14 HDP-UTILS main'  >> /etc/apt/sources.list.d/HDP.list
RUN echo 'deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/azurecore/ trusty main' >> /etc/apt/sources.list.d/azure-public-trusty.list

....
Rest of your Dockerfile.

4
你的例子展示了先运行更新,然后安装apt-transport-https。你能否澄清一下你的回答?看起来你更新了一次以进行安装,然后在这个特定的例子中,添加源并从这些新源再次更新。关于这种情况,回答可以做出改进。 - Elijah Lynn
1
要从https url更新源,apt-transport-https软件包应该已经存在。为了确保安装最新的软件包,我们需要在从Ubuntu安装软件包之前发出更新命令,因此第一次更新是必需的。第二次更新是为了从Dockerfile中添加的源进行安装。 - techtabu
4
你真是个宝石!apt-get install -y apt-transport-https - An0nC0d3r
3
在我的情况下,时钟由于https://github.com/docker/for-win/issues/5593不同步,并在WSL2中运行“sudo hwclock -s”已经为所有docker构建修复了该问题,因为我正在WSL2中运行docker。 - Heath
这是因为我在使用apt-get install时没有添加-y参数导致的。这与apt-transport-https无关,但是它让我朝着正确的方向前进了一步。因此,在添加潜在的不必要的软件包之前,您可以尝试检查是否有-y参数。 - Matthis Kohli
@Heath的解决方案在WSL2下对我有效。 - rdmtinez

40

我使用了 docker system prune 命令来清理硬盘,这是因为我在另一个 SO 回答 上读到了相关信息。


这真的像冠军一样运作了。在尝试更新容器时,我遇到了很奇怪的apt-get安装问题,而这解决了问题。谢谢! - Shrout1
这将是这里最好的答案。 - Matt K
这对我也起了作用。 - Danny Diaz
肯定的,这就是我所需要的答案。 - undefined

14

如果对其他人有用,我在此添加一些内容。在我的情况下,我必须将以下行添加到Dockerfile中:

RUN apt-get -y update

2
我在使用Dockerfile时遇到了问题,尝试apt-get install时返回了100的错误代码。结果发现我拼写错了软件包的名称。希望这对某人有所帮助。

2

我遇到了同样的问题,因为我的Dockerfile中的FROM命令引用了Ubuntu 20.10版本,该版本的支持在2021年7月结束:

FROM ubuntu:groovy-20210416

将此更新为:

FROM ubuntu:focal-20211006

解决了我的问题。

0
基于 @Jonathan Morales Vélez 的答案(磁盘空间不足),以下命令帮助我回收了磁盘空间:
docker image prune -f

之后,Docker镜像构建恢复正常。


0

我曾经遇到同样的问题,幸亏有这个答案帮我解决了:

https://superuser.com/questions/1423486/issue-with-fetching-http-deb-debian-org-debian-dists-jessie-updates-inrelease/1424377

你可能想要添加这行代码

RUN printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list

在 Dockerfile 中的任何 apt-get 命令之前。

-1

请检查您的时间设置。
它们可能与目标http|https存储库不同步。


-1
在我的情况下,错误是:

存储库'http://internalrepo/repos/internalrepo-name/1 Release'没有Release文件。

在deb包名称之前添加[trusted=yes]修复了该问题。
即:
deb [trusted=yes] http://internalrepo/repos/internalrepo-name/1 /

-3

在某些情况下,这可能是网络问题,稍后几个小时再尝试或使用其他网络可能会解决该问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接