我正在使用 Docker for Mac 和这样的 Dockerfile(才刚刚开始):
# Base image
FROM ubuntu:16.04
RUN export DEBIAN_FRONTEND=noninteractive
# Update packages list and system
RUN apt-get -y update;
RUN apt-get -y upgrade
# Allow to use add-apt-repository command
RUN apt-get -y install software-properties-common locales poppler-utils
几天后我收到这样的错误:
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libk5crypto3_1.13.2+dfsg-5ubuntu2_amd64.deb Hash Sum mismatch
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/k/keyutils/libkeyutils1_1.5.9-8ubuntu1_amd64.deb Hash Sum mismatch
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb5-3_1.13.2+dfsg-5ubuntu2_amd64.deb Hash Sum mismatch
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libgssapi-krb5-2_1.13.2+dfsg-5ubuntu2_amd64.deb Writing more data than expected (206672 > 201874) [IP: 91.189.88.152 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
ERROR: Service 'web' failed to build: The command '/bin/sh -c apt-get -y install software-properties-common locales poppler-utils' returned a non-zero code: 100
以前我在 Windows 上使用 Docker 并且在 2 年内可能会出现 1 或 2 次这样的错误,而现在在 Mac 上我总是遇到这些错误并且无法构建我的图像。
这可能是什么原因?我应该在我的 Mac 上做些什么,还是应该更改我的 Dockerfile 中的一些东西以使其工作?
请注意,我也在玩这样的更改:
# Base image
FROM ubuntu:16.04
RUN export DEBIAN_FRONTEND=noninteractive
RUN echo 'Acquire::Acquire-by-hash "yes";' >> /etc/apt/apt.conf
RUN echo 'Acquire::CompressionTypes::Order "gz";' >> /etc/apt/apt.conf
# Update packages list and system
RUN apt-get -y update
RUN apt-get -y clean
RUN apt-get -y upgrade
RUN apt-get -y clean
RUN apt-get dist-upgrade
# Allow to use add-apt-repository command
RUN apt-get -y install software-properties-common locales poppler-utils
或
# Base image
FROM ubuntu:16.04
RUN export DEBIAN_FRONTEND=noninteractive
RUN rm -rf /var/lib/apt/lists/partial
RUN echo 'Acquire::By-Hash "yes";' >> /etc/apt/apt.conf
RUN echo 'Acquire::CompressionTypes::Order:: "gz";' >> /etc/apt/apt.conf
# Update packages list and system
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils
RUN apt-get -y clean
RUN apt-get -y upgrade
RUN apt-get -y clean
RUN apt-get dist-upgrade
# Allow to use add-apt-repository command
RUN apt-get -y install software-properties-common
RUN apt-get -y install locales poppler-utils
但这并没有改变这一点。
我已经在 Windows 上对其进行了测试,它运行得非常好。有趣的是,当我在 MacOS 上将 FROM ubuntu:16.04
更改为 FROM ubuntu:17.10
时,它也可以正常工作,所以似乎包不是从16.04 但 17.10 当我有 FROM ubuntu:16.04
我已经:
- 重新启动我的 Mac
- 重新启动 Docker
- 删除所有数据
- 恢复出厂设置
- 卸载并重新安装 Docker
- 从 mac49 降级到 17.12.0-ce-mac46 (21698)
- 删除所有图像/容器并重新构建它们
这些都没有改变事情。奇怪的是它以前在我的 MacOS 上工作过(我之前构建图像大约 20-30 次而且很好)而且现在也许每 100 次一次它现在可以成功构建图像但显然这不是最好的解决方案.
作为临时解决方法,我在 Windows 上构建了所有镜像并将它们推送到 Docker hub,然后将它们拉到 MacOS 上,但这同样只是解决方法,而不是解决方案。
最佳答案
我的感觉是您遇到了一个已知问题 Ubuntu bug #972077我也遇到过。
显然,更新镜像时,apt 存储库格式会受到竞争条件的影响。此问题特别影响快速更改的存储库,例如开发版本并与 16.04 和 17.10 之间的症状描述一致。
对我有用的推荐解决方案是运行:
apt-get clean
rm -r /var/lib/apt/lists/*
# The blog below also recommends to change your compression
apt-get update -o Acquire::CompressionTypes::Order::=gz
注意:这似乎与您从中提取的缓存混淆了。因此在某些情况下,您似乎需要更改下载存储库以更新缓存。
引用资料:
Package Cloud 博文:
关于此问题的 Ubuntu 线程:
关于这个问题的 Unix 线程
我希望以上内容能帮助您指明正确的方向。
关于macos - 适用于 Mac 的 Docker - 哈希和不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48645936/