Docker设置DNS, 或直接配置静态域名

本文介绍了如何解决在Docker容器中无法通过内网域名下载文件的问题。由于DNS解析不稳定,作者通过在宿主机上使用nslookup获取域名IP,并尝试两种方法在Docker中使域名解析生效:1) 修改docker的daemon.json配置文件,添加有效的DNS服务器;2) 在Docker容器内编辑/etc/hosts文件,添加静态域名映射。这两种方法均能帮助Docker识别并解析内网域名。

需要在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值