我正在MacBook Pro上进行docker构建,并且始终因以下错误而失败:
Reading package lists...
Building dependency tree...
Reading state information...
Suggested packages:
zip
The following NEW packages will be installed:
unzip
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 170 kB of archives.
After this operation, 547 kB of additional disk space will be used.
Err:1 http://deb.debian.org/debian stretch/main amd64 unzip amd64 6.0-21+deb9u1
404 Not Found
E: Failed to fetch http://deb.debian.org/debian/pool/main/u/unzip/unzip_6.0-21+deb9u1_amd64.deb 404 Not Found
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
The command '/bin/sh -c apt-get install unzip' returned a non-zero code: 100
docker版本:Docker版本19.03.8,构建afacb8b
MacOS:Mojave 10.14.6
Dockerfile片段:
FROM debian:latest
RUN apt-get update
RUN apt-get install -y ca-certificates
RUN apt-get install unzip
[该版本在使用docker-ce = 17.09.0〜ce-0〜ubuntu的travis CI中运行正常
关于如何进一步调试的任何建议?最初,我们认为这可能是debian方面的临时问题,但问题仍然存在,因此很可能与我的环境有关。
RUN
行合并为一个命令:FROM debian:latest
RUN apt-get update \
&& apt-get install -y \
ca-certificates \
unzip
结合两种因素导致404错误。一方面,Docker将缓存单个Dockerfile步骤:它看到从debian:latest
开始已经是RUN apt-get update
,因此它使用了昨天的命令版本。另一方面,Debian经常用非常小的更新来更新其存储库(请参见该版本号的+deb9u1
部分),并且在这样做时,他们会从其存储库中删除以前的版本。这种组合意味着您可以按顺序使用apt-get update
索引的缓存版本,但是其中提到的软件包版本不再存在。像这样将这些行组合在一起意味着Docker将始终同时运行
apt-get update
和apt-get install
;如果将软件包添加到列表中,它将在尝试下载内容之前重新运行update
步骤。这样可以避免此问题,但在更改软件包列表时会花费一些额外的下载时间。