Docker網(wǎng)絡(luò)如何配置dns
1. docker配置DNS方法
docker容器配置dns解析地址,我知道的有以下幾種辦法(優(yōu)先級(jí)從高到低):
- 啟動(dòng)的時(shí)候加–dns=IP_ADDRESS;
- 守護(hù)進(jìn)程啟動(dòng)參數(shù)中添加DOCKER_OPTS=“–dns 8.8.8.8” ;
- 在/etc/docker/deamon.json中添加dns信息(與守護(hù)進(jìn)程參數(shù)會(huì)沖突不能同時(shí)添加。);
- 使用宿主機(jī)的/etc/resolv.conf文件;
2. 默認(rèn)DNS配置
怎樣為Docker提供的每一個(gè)容器進(jìn)行主機(jī)名和DNS配置,而不必建立自定義鏡像并將主機(jī)名寫 到里面?
它的訣竅是覆蓋三個(gè)至關(guān)重要的在/etc下的容器內(nèi)的虛擬文件,那幾個(gè)文件可以寫入 新的信息。
你可以在容器內(nèi)部運(yùn)行mount看到這個(gè):
$ mount ... /dev/disk/by-uuid/1fec...ebdf on /etc/hostname type ext4 ... /dev/disk/by-uuid/1fec...ebdf on /etc/hosts type ext4 ... /dev/disk/by-uuid/1fec...ebdf on /etc/resolv.conf type ext4 ... ...
3. 啟動(dòng)時(shí)配置dns參數(shù)
| Options | Description |
|---|---|
| -h HOSTNAME or --hostname=HOSTNAME | 在該容器啟動(dòng)時(shí),將HOSTNAME設(shè)置到容器內(nèi)的/etc/hosts, /etc/hostname, /bin/bash提示中。 |
| –link=CONTAINER_NAME or ID:ALIAS | 在該容器啟動(dòng)時(shí),將ALIAS和CONTAINER_NAME/ID對(duì)應(yīng)的容器IP添加到/etc/hosts. 如果 CONTAINER_NAME/ID有多個(gè)IP地址 ? |
| –dns=IP_ADDRESS… | 在該容器啟動(dòng)時(shí),將nameserver IP_ADDRESS添加到容器內(nèi)的/etc/resolv.conf中??梢耘渲枚鄠€(gè)。 |
| –dns-search=DOMAIN… | 在該容器啟動(dòng)時(shí),將DOMAIN添加到容器內(nèi)/etc/resolv.conf的dns search列表中??梢耘渲枚鄠€(gè)。 |
| –dns-opt=OPTION… | 在該容器啟動(dòng)時(shí),將OPTION添加到容器內(nèi)/etc/resolv.conf中的options選項(xiàng)中,可以配置多個(gè) |
如果docker run時(shí)不含--dns=IP_ADDRESS…, --dns-search=DOMAIN…, or --dns-opt=OPTION…參數(shù),docker daemon會(huì)將copy本主機(jī)的/etc/resolv.conf,然后對(duì)該copy進(jìn)行處理(將那些/etc/resolv.conf中ping不通的nameserver項(xiàng)給拋棄),處理完成后留下的部分就作為該容器內(nèi)部的/etc/resolv.conf。
因此,如果你想利用宿主機(jī)中的/etc/resolv.conf配置的nameserver進(jìn)行域名解析,那么你需要宿主機(jī)中該dns service配置一個(gè)宿主機(jī)內(nèi)容器能ping通的IP。
如果宿主機(jī)的/etc/resolv.conf內(nèi)容發(fā)生改變,docker daemon有一個(gè)對(duì)應(yīng)的file change notifier會(huì)watch到這一變化,然后根據(jù)容器狀態(tài)采取對(duì)應(yīng)的措施:
- 如果容器狀態(tài)為stopped,則立刻根據(jù)宿主機(jī)的/etc/resolv.conf內(nèi)容更新容器內(nèi)的/etc/resolv.conf.
- 如果容器狀態(tài)為running,則容器內(nèi)的/etc/resolv.conf將不會(huì)改變,直到該容器狀態(tài)變?yōu)閟topped.
- 如果容器啟動(dòng)后修改過容器內(nèi)的/etc/resolv.conf,則不會(huì)對(duì)該容器進(jìn)行處理,否則可能會(huì)丟失已經(jīng)完成的修改,無論該容器為什么狀態(tài)。
- 如果容器啟動(dòng)時(shí),用了–dns, --dns-search, or --dns-opt選項(xiàng),其啟動(dòng)時(shí)已經(jīng)修改了宿主機(jī)的/etc/resolv.conf過濾后的內(nèi)容,因此docker daemon永遠(yuǎn)不會(huì)更新這種容器的/etc/resolv.conf。
注意:
docker daemon監(jiān)控宿主機(jī)/etc/resolv.conf的這個(gè)file change notifier的實(shí)現(xiàn)是依賴linux內(nèi)核的inotify特性,而inotfy特性不兼容overlay fs,因此使用overlay fs driver的docker deamon將無法使用該/etc/resolv.conf自動(dòng)更新的功能。
$ sudo docker run --hostname 'myhost' -it centos [root@myhost /]# cat /etc/hosts 172.17.0.7 myhost $ sudo docker run -it --dns=192.168.5.1 centos [root@6a38049c9052 /]# cat /etc/resolv.conf nameserver 192.168.5.1 $ sudo docker run -it --dns-search=www.domain.com centos [root@ae0e9e99596f /]# cat /etc/resolv.conf nameserver 192.168.4.1 search www.mydomain.com
4. daemon.json配置DNS格式
root@node-7:~# cat /etc/docker/daemon.json
{
"data-root": "/data/docker",
"dns": ["172.18.0.52", "172.18.0.70", "183.XX.XX.XX"],
"dns-search": ["fiibeacon.local"],
"hosts": ["unix:///var/run/docker.sock", "tcp://172.18.0.141:2375"],
"storage-driver": "overlay2"
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Idea中使用Docker部署SpringBoot項(xiàng)目的詳細(xì)步驟
這篇文章主要介紹了在Idea中使用Docker部署SpringBoot項(xiàng)目的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
創(chuàng)建Web項(xiàng)目的Docker鏡像實(shí)例講解
這篇文章主要介紹了創(chuàng)建Web項(xiàng)目的Docker鏡像實(shí)例講解的相關(guān)資料,需要的朋友可以參考下2016-10-10
使用Docker開發(fā)python Web 應(yīng)用
本文給大家詳細(xì)講解了如何使用Docker開發(fā)python應(yīng)用,特別是WEB應(yīng)用的步驟,Docker本質(zhì)上提供了非常輕量化的VMs,我們可以使用其創(chuàng)建一個(gè)高標(biāo)準(zhǔn)隔離并能大大減少失配的開發(fā)和產(chǎn)品環(huán)境。2016-10-10
Docker Compose 兩種安裝與使用方案(適用于 Docker 19.0
本文以Docker 19.03.15(Ubuntu 20.04)為例,詳細(xì)對(duì)比這兩種方式的安裝、使用和特點(diǎn),幫助你快速選擇適合自己的方案,感興趣的朋友跟隨小編一起看看吧2026-01-01
如何在Docker容器內(nèi)外互相拷貝數(shù)據(jù)
本篇文章主要介紹了如何在Docker容器內(nèi)外互相拷貝數(shù)據(jù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
詳解Docker學(xué)習(xí)之用commit命令創(chuàng)建鏡像
這篇文章主要介紹了詳解Docker學(xué)習(xí)之用commit命令創(chuàng)建鏡像,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03

