尝试在配置如下的系统上构建 docker 映像时收到 DNS 错误:
我没有使用代理。
我的 Dockerfile 是
FROM alpine:3.18
RUN apk add --no-cache rsync
尝试构建时,我收到 DNS 错误:
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
WARNING: updating and opening https://dl-cdn.alpinelinux.org/alpine/v3.18/main: DNS lookup error
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
WARNING: updating and opening https://dl-cdn.alpinelinux.org/alpine/v3.18/community: DNS lookup error
4 unavailable, 0 stale; 15 distinct packages available
运行独立容器成功解析地址
docker run --rm alpine:3.18 nslookup dl-cdn.alpinelinux.org
Server: 192.168.94.2
Address: 192.168.94.2:53
Non-authoritative answer:
dl-cdn.alpinelinux.org canonical name = dualstack.j.sni.global.fastly.net
Name: dualstack.j.sni.global.fastly.net
Address: 2a04:4e42:1f::644
Non-authoritative answer:
dl-cdn.alpinelinux.org canonical name = dualstack.j.sni.global.fastly.net
Name: dualstack.j.sni.global.fastly.net
Address: 151.101.134.132
但我无法 ping 或按名称进行 apk 更新
docker run --rm alpine:3.18 ping -c 1 dl-cdn.alpinelinux.org
ping: bad address 'dl-cdn.alpinelinux.org'
虽然通过 IP 进行 ping 操作有效。
scott@spruce:\~$ docker run --rm alpine:3.18 ping -c 1 151.101.134.132
PING 151.101.134.132 (151.101.134.132): 56 data bytes
64 bytes from 151.101.134.132: seq=0 ttl=127 time=32.607 ms
\--- 151.101.134.132 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 32.607/32.607/32.607 ms
的建议
docker run --rm alpine:3.18 apk update
docker run --rm --network=host alpine:3.18 apk update
docker run --rm --dns=8.8.8.8 alpine:3.18 apk update
此外,按照这个答案使用“en*”配置netplan也没有帮助。
这似乎也有点特定于基础映像,因为我在构建基于 Ubuntu 的映像(特别是 python 3.5 映像)时没有任何问题
如何为 Ubuntu/Alpine 组合配置网络?
我相信我能够通过设置
--add-host
指令来解决这个问题
docker image build --add-host "dl-cdn.alpinelinux.org:151.101.134.132" .
奇怪的是,这样做似乎可以修复它以构建基于 alpine:3.18 的任何其他图像,如果构建完全不同的基于 alpine 的图像,我似乎不再需要它了。我不能排除这是新的一天并且其他事情发生了变化。 (例如重新启动该人)。