需要在docker内通过内网域名下载文件. 也许在家办公, 访问DNS服务器的不稳定的原因, 默认的 8.8.8.8 或 8.8.4.4 (Google免费的) 无法解析诸如公司的内部域名 sqbu-github.xxxxx.com. 而在宿主机上可以进行操作:
git clone --mirror git@sqbu-github.xxxxx.com:SL/boost /home/lajiang/Workspace/bumblebee/sl-main/_build/git-cache/git@sqbu-github.xxxxx.com/SL/boost.git
于是乎, 在宿主机通过ping域名, 或者利用nslookup可以获得域名的IP, 以及宿主机所使用的DNS服务器:
lajiang@liajiang-lnx:~/Workspace/bumblebee/sl-main$ ping sqbu-github.xxxxx.com
PING sqbu-github.xxxxx.com (64.102.211.38) 56(84) bytes of data.
64 bytes from sqbu-github.xxxxx.com (64.xxx.xxx.38): icmp_seq=1 ttl=44 time=211 ms
64 bytes from sqbu-github.xxxxx.com (64.xxx.xxx.38): icmp_seq=2 ttl=44 time=210 ms
lajiang@liajiang-lnx:~/Workspace/bumblebee/sl-main$ nslookup sqbu-github.xxxxx.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: sqbu-github.xxxxx.com
Address: 64.xxx.xxx.38
那么如果让docker内识别出域名sqbu-github.xxxxx.com呢? 经查阅有若干种方式:
1. 在宿主机编辑 docker 的 daemon.json
sudo vim /etc/docker/daemon.json
加入刚刚通过nslookup查询到的127.0.0.53(然而这个还是不行, 最终64.xxx.xxx.184是询问IT得知的另一个dns服务器), 以优先取代不好用的dns IP:
{
"dns":["64.xxx.xxx.184","8.8.8.8","8.8.4.4"]
}
重载配置及重新启动:
sudo systemctl daemon-reload
sudo service docker restart
再次run docker, 发现已经生效并且可以ping通. 另外注意, 不要直接在docker内修改 /etc/resolv.conf, 因为这个文件时docker自动生成的.
2. 直接在docker内编辑/etc/hosts
sudo vim /etc/hosts
当然这个属于静态查询表, 一样沿用宿主机下面ping返回的到或者 /etc/hosts的配置:
64.102.211.38 sqbu-github.xxxxx.com
本文介绍了如何解决在Docker容器中无法通过内网域名下载文件的问题。由于DNS解析不稳定,作者通过在宿主机上使用nslookup获取域名IP,并尝试两种方法在Docker中使域名解析生效:1) 修改docker的daemon.json配置文件,添加有效的DNS服务器;2) 在Docker容器内编辑/etc/hosts文件,添加静态域名映射。这两种方法均能帮助Docker识别并解析内网域名。

1万+

被折叠的 条评论
为什么被折叠?



