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

た 入场券 2022-10-18 01:39 52阅读 0赞
在 docker 中运行 apt-get update 报错 returned a non-zero code: 100

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

  1. Get:36 http://ftp.uni-stuttgart.de/debian sid/main amd64 Packages.diff/Index [27.9 kB]
  2. Get:36 http://ftp.uni-stuttgart.de/debian sid/main amd64 Packages.diff/Index [27.9 kB]
  3. Get:37 http://ftp.uni-stuttgart.de/debian sid/main amd64 Packages [9,795 kB]
  4. Reading package lists...
  5. 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)
  6. The command '/bin/sh -c apt-get update' returned a non-zero code: 100

解法 1:失败重新 apt-get

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

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

其中双竖线的意义是:

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

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

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

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

解法 3:再换 apt 源

  1. 原因竟然是一些不靠谱的网络供应商喜欢自作聪明,从自己的缓存里寻找你要访问的数据,用来降低带宽,但技术考虑不周期,导致用户使用时出现错误。
  2. 特别的,我深有体会的一点是,宽带通/长城宽带特别喜欢搞这些事情,喜欢拦截、修改用户访问的网页,然后在里面添加自己的广告用来盈利,如果你在使用宽带通/长城宽带浏览网页时,网页底部突然弹出广告,这很有可能就是宽带通/长城宽带这些宽带服务商干的恶心事。
  3. 同样是 Hash Sum mismatch 的错误,在国内,也变成了具有中国特色的 Hash Sum mismatch 错误和具有中国特殊的解决方案。

再次更换为了网易源:

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

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,52人围观)

还没有评论,来说两句吧...

相关阅读