dockerfile 中运行 apt-get update 报错 returned a non-zero code: 100
在 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
·
在 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
更多推荐
已为社区贡献1条内容
所有评论(0)