在 docker 中运行 apt-get update 报错 returned a non-zero code: 100

出现问题:
在构建 docker 执行 Dockerfile 中的 RUN apt-get update 时报错 returned a non-zero code: 100。其大致错误内容如下格式:

Get:36 http://ftp.uni-stuttgart.de/debian sid/main amd64 Packages.diff/Index [27.9 kB]
Get:36 http://ftp.uni-stuttgart.de/debian sid/main amd64 Packages.diff/Index [27.9 kB]
Get:37 http://ftp.uni-stuttgart.de/debian sid/main amd64 Packages [9,795 kB]
Reading package lists...
E: Could not open file /var/lib/apt/lists/http.debian.net_debian_dists_sid_main_binary-amd64_Packages.diff_Index - open (2: No such file or directory)
The command '/bin/sh -c apt-get update' returned a non-zero code: 100

解法 1:失败重新 apt-get

查阅资料以为是网络被墙的问题,但没有优雅的解决方法。使用英文查阅后在 github 上找到解法:

FWIW, I was able to work around this problem by adding RUN apt-get update || apt-get update to my Dockerfile.

其中双竖线的意义是:

双竖线‘||’,用双竖线‘||’分割的多条命令,执行的时候遵循如下规则,如果前一条命令为真,则后面的命令不会执行,如果前一条命令为假,则继续执行后面的命令。

即 apt-get update 失败后重试一次。虽不知为何这么做但很奇妙地解决了报错问题。

解法 2:更换 apt 源
方法 1 后来仍然报错,可能是 DNS 配置的问题,更换成阿里源仍然报错,换成清华源就好了。

# 原本的 Dockerfile
RUN apt-get update

# 更改的 Dockerfile
RUN sed -i "s@/archive.ubuntu.com/@/mirrors.tuna.tsinghua.edu.cn/@g" /etc/apt/sources.list \
    && rm -Rf /var/lib/apt/lists/* \
    && apt-get update

解法 3:再换 apt 源

原因竟然是一些不靠谱的网络供应商喜欢自作聪明,从自己的缓存里寻找你要访问的数据,用来降低带宽,但技术考虑不周期,导致用户使用时出现错误。

特别的,我深有体会的一点是,宽带通/长城宽带特别喜欢搞这些事情,喜欢拦截、修改用户访问的网页,然后在里面添加自己的广告用来盈利,如果你在使用宽带通/长城宽带浏览网页时,网页底部突然弹出广告,这很有可能就是宽带通/长城宽带这些宽带服务商干的恶心事。

同样是 Hash Sum mismatch 的错误,在国内,也变成了具有中国特色的 Hash Sum mismatch 错误和具有中国特殊的解决方案。

再次更换为了网易源:

RUN sed -i "s@/archive.ubuntu.com/@/mirrors.163.com/@g" /etc/apt/sources.list \
    && rm -Rf /var/lib/apt/lists/* \
    && apt-get update

解法 4:终解
上述方法在重复使用后,由于校园网的缓存,再次失效。不使用缓存就不会报错了!为 apt-get update 添加 -o Acquire::http::No-Cache=True 参数即可:

RUN sed -i "s@/archive.ubuntu.com/@/mirrors.163.com/@g" /etc/apt/sources.list \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get update --fix-missing -o Acquire::http::No-Cache=True

原文链接:
https://www.cnblogs.com/rioka/p/13821598.html

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐