在 Docker 构建过程中名称解析失败。

4
我遇到了一个问题,当我执行docker build命令时,会收到以下错误提示:
curl: (6) Could not resolve host: dl.yarnpkg.com
gpg: no valid OpenPGP data found.

这是我的Docker构建文件。
# Base image
FROM ruby:2.5.0

RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
RUN curl -fsSL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee 
/etc/apt/sources.list.d/yarn.lisT
RUN apt-get update 
RUN apt-get install -qq -y build-essential libpq-dev nodejs yarn

在docker外运行时,命令可以成功完成。

为了解决问题,我尝试了以下操作:

  1. 将DNS服务器添加到/etc/docker/daemon.json - 仍然存在同样的问题
  2. 取消注释/etc/default/docker中的DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"行 - 仍然存在同样的问题
  3. 更改本地/etc/resolv.conf中使用的DNS服务器 - 仍然存在同样的问题。

我尝试了来自Google和OpenDNS的DNS服务器,以及根据我的位置使用不同的ISP。

笔记本电脑正在运行Ubuntu 16.04,安装了Docker版本18.06.0-ce,构建版本为0ffa825。

使用以下内容也失败了:

FROM ruby:2.5.0
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

导致以下错误。
W: Failed to fetch http://deb.debian.org/debian/dists/stretch/InRelease  Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://deb.debian.org/debian/dists/stretch-updates/InRelease  Temporary failure resolving 'deb.debian.org'
W: Failed to fetch http://security.debian.org/dists/stretch/updates/InRelease  Temporary failure resolving 'security.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.

我知道这不仅仅是与dl.yarnpkg.com主机有关的问题。

使用no-cache选项运行docker build命令没有任何区别。


如果在容器外的Docker主机上运行nslookup dl.yarnpkg.com 8.8.8.8,会发生什么? - BMitch
服务器:8.8.8.8 地址:8.8.8.8#53非权威答案: 名称:dl.yarnpkg.com 地址:104.16.60.173 名称:dl.yarnpkg.com 地址:104.16.63.173 名称:dl.yarnpkg.com 地址:104.16.61.173 名称:dl.yarnpkg.com 地址:104.16.62.173 名称:dl.yarnpkg.com 地址:104.16.59.173我已尝试不同的DNS提供商,但问题仍然存在。 - user2099762
我也尝试在Ubuntu DNS设置中禁用dnsmasq,但没有成功。 - user2099762
你在更改daemon.json后重新加载了docker引擎吗?如果你运行 docker run -it --rm alpine cat /etc/resolv.confdocker run -it --rm alpine nslookup dl.yarnpkg.com 会发生什么? - BMitch

由resolvconf(8)生成的用于glibc resolver(3)的动态resolv.conf(5)文件

不要手动编辑此文件 -- 您的更改将被覆盖

nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 192.168.0.1 nameserver 208.67.222.222 search Home nameserver 8.8.8.8 nameserver 8.8.4.4
- user2099762
第二个命令出现了nslookup: 无法解析 'dl.yarnpkg.com': 请重试。 - user2099762
2个回答

7

我使用 Ubuntu 16.04 和 Docker,有时候也会出现名称解析问题。

唯一有效的解决方法是在构建时添加 --network=host。虽然不确定具体原因,但似乎需要这样才能使用计算机的名称解析功能。希望对你有所帮助。


我有同样的问题,但是在CentOS 8上。 - Isaac Palacio
--network=host 对我来说解决了这个问题,但是即使在 Docker 守护进程重启后,这个问题最近才出现。 - slhck
每次执行docker run命令时,您都需要设置网络。这很奇怪,因为我认为使用桥接网络应该可以正常工作。 - Paulo Pedroso

1

有时我遇到这个问题,需要重新启动docker守护进程。

我在虚拟机中工作,基本上从不关闭它,而是冻结它并稍后再次工作。我还必须在主机上切换网络,这也会影响虚拟机。

似乎这有时会使docker守护进程困惑,需要重新启动才能使其网络堆栈恢复到一致状态。


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