Docker构建错误: 添加主机失败。

9

运行docker build命令时,我遇到了一个意外的错误。我说“意外”,是因为我已经有一段时间没有更改过我的Dockerfile文件了,并且在最后一次使用它时,一切正常,但现在我收到以下错误:

在网桥网络上创建端点optimistic_spence失败:无法添加主机(veth9fc3a03)<=> 沙盒(veth15abfd6)配对接口:不支持此操作。

如果这些信息有所帮助:

  • Docker版本为18.06.0-ce,构建版本为0ffa8257ec
  • 我不能看到任何带有docker ps命令的容器
  • Systemd返回Docker进程的活动状态(sudo systemctl status docker
  • 构建命令是:docker build -t user/repo:tag .

Dockerfile如下:

FROM alpine:3.4

LABEL version="current version"
LABEL description="A nice description."
LABEL maintainer="my@email.com"

RUN apk update && apk add \
    gcc \
    g++ \
    make \
    git \
    && git clone https://gitlab.com/user/repo.git \
    && cd repo \
    && make \
    && cp program /bin \
    && rm -r /repo \
    && apk del g++ make git

WORKDIR /tmp

ENTRYPOINT ["program"]

有人知道发生了什么吗?谢谢!

编辑 当与--network选项结合使用时,错误会有些变化,但无法解决问题。例如,--network=host会出现以下错误:

获取 http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz

错误: http://dl-cdn.alpinelinux.org/alpine/v3.4/main: 临时错误(稍后重试)

警告:忽略APKINDEX.167438ca.tar.gz:没有这样的文件或目录

获取 http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz

错误: http://dl-cdn.alpinelinux.org/alpine/v3.4/community: 临时错误(稍后重试)

警告:忽略APKINDEX.a2e6dac0.tar.gz:没有这样的文件或目录 2个错误; 11个不同的软件包可用

命令'/bin/sh -c apk update && apk add gcc g++ make git && git clone https://gitlab.com/user/repo.git && cd repo && make && cp program /bin && rm -r /repo && apk del g++ make git' 返回了非零代码:2


使用 --network 选项无法解决问题。我会更新问题并进行备注。 - elcortegano
将您的shell脚本更改为dockerfile中的每行RUN指令。您可以确定哪个层导致错误。 - Yamuk
在第一个RUN指令“RUN apk update”执行期间发生错误。 - elcortegano
不知道是否相关,但我在Win10中使用Docker for Win,无法再使用主机名连接到容器。以前我是可以的。 - Yamuk
我在Ubuntu下的docker构建中遇到了相同的错误。在我的情况下,原因是我正在运行一个自定义内核,Docker似乎不喜欢这样。启动到标准内核解决了这个问题。 - Olli
显示剩余3条评论
4个回答

15

我也遇到了同样的错误,即使是运行systemctl restart docker和清理镜像和系统也无法解决它,最后我只好重启了电脑,这似乎解决了问题。


1
这种情况经常发生在我身上,因为内核更新的缘故。所以重启是解决的办法。 - eddy147
是的。我刚重新启动了一下,就正常工作了。 - MD. Saffan Alvy
2
尝试了docker system prune --all没有起作用。 尝试了systemctl restart docker没有起作用。 尝试重新启动电脑,起作用了 - undefined

6
看起来在任何docker网络桥接方面出了一些问题,这导致无法创建相同的网络,因为它已经“僵死”了。
请尝试以下步骤:
1. 运行 "docker network prune" 命令,如果不行,请尝试以下命令: 2. 运行 "docker system prune" 命令 <-- 注意,这也会清除您的命名卷内容,即未分配给容器的卷。因此,如果您有分配给容器的卷,您需要重新构建/创建容器。 3. 运行 "/etc/init.d/docker restart" 命令
让我看看发生了什么,如果这些步骤不能解决您的问题,实际上我需要更多关于您问题的信息。

4
执行了 docker network prunedocker system prune 之后,我仍然遇到相同的错误 :( - elcortegano

1

我已经两次遇到这个问题,解决方法始终如一。我在此发布帖子,以便有需要的人可以获得帮助:

  • 首先,请确保DNS服务器已正确设置(例如将DNS设置为1.1.1.1)。
  • 其次,重启docker守护程序。

对于在Linux中使用systemd的用户,systemctl restart不能解决我的问题。我必须停止并重新启动docker才能使其正常工作。之后,我就可以登录并再次拉取镜像了。


为了参考,请使用systemctl restart docker命令重新启动Docker。 - Jack

1

仅仅是为了增加一些可能的原因。 对于我(以及可能是@testix),这是因为我进行了系统升级(archlinux),所以我的内核模块得到了升级,但我仍在运行旧内核,因此模块无法加载。 您可以尝试加载一个随机模块: modprobe vcan modprobe: 致命错误:目录/lib/modules/6.2.7-arch1-1中未找到vcan模块

这意味着您必须重新启动(或者如果可以摆脱它,则使用--network)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接