我正在使用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开始,而是在我有FROM ubuntu:16.04
< / p>
我已经:
这些都没有改变。奇怪的是,它之前在我的MacOS上工作(我之前已经构建了大约20-30次图像并且它很好)现在也许每100次它现在可以成功构建图像但显然这不是最好的解决方案。
作为一种临时解决方法,我已经在Windows上构建了所有图像并将它们推送到Docker集线器,然后将它们拉到MacOS上,但这又是解决方法而不是解决方案。
答案 0 :(得分:4)
很难说这里出了什么问题,因为你自己已经尝试了很多东西。我可以建议的一件事是改变镜子。您可以从
中找到镜像列表https://launchpad.net/ubuntu/+archivemirrors
然后像下面那样使用
# Base image
FROM ubuntu:16.04
RUN sed -i '1ideb mirror.onet.pl/pub/mirrors/… xenial main' /etc/apt/sources.list
RUN sed -i '1ideb-src mirror.onet.pl/pub/mirrors/… xenial main' /etc/apt/sources.list
您可以尝试的另一个选项是使用apt
代替apt-get
RUN apt update && apt upgrade
RUN apt install -y software-properties-common locales poppler-utils
您可以尝试的另一个选项是使用单个RUN语句
RUN apt update && apt upgrade && apt install -y software-properties-common locales poppler-utils
所有这些可能无法回答原因,但它可能会给你一个解决方法
答案 1 :(得分:4)
我的感觉是你遇到了我遇到的已知问题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 Blog Post:
关于这个问题的Ubuntu线程:
Unix问题上的线程
我希望上述内容可以帮助您找到正确的方向。