Docker for Mac - 哈希和不匹配

时间:2018-02-06 14:59:47

标签: macos ubuntu docker

我正在使用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>

我已经:

  • 重启我的Mac
  • 重启Docker
  • 删除了所有数据
  • 重置为出厂默认设置
  • 卸载并再次安装Docker
  • 从mac49降级为17.12.0-ce-mac46(21698)
  • 删除所有图像/容器并重新构建

这些都没有改变。奇怪的是,它之前在我的MacOS上工作(我之前已经构建了大约20-30次图像并且它很好)现在也许每100次它现在可以成功构建图像但显然这不是最好的解决方案。

作为一种临时解决方法,我已经在Windows上构建了所​​有图像并将它们推送到Docker集线器,然后将它们拉到MacOS上,但这又是解决方法而不是解决方案。

2 个答案:

答案 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问题上的线程

我希望上述内容可以帮助您找到正确的方向。