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ī)名寫(xiě) 到里面?
它的訣竅是覆蓋三個(gè)至關(guān)重要的在/etc下的容器內(nèi)的虛擬文件,那幾個(gè)文件可以寫(xiě)入 新的信息。
你可以在容器內(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)后修改過(guò)容器內(nèi)的/etc/resolv.conf,則不會(huì)對(duì)該容器進(jìn)行處理,否則可能會(huì)丟失已經(jīng)完成的修改,無(wú)論該容器為什么狀態(tài)。
- 如果容器啟動(dòng)時(shí),用了–dns, --dns-search, or --dns-opt選項(xiàng),其啟動(dòng)時(shí)已經(jīng)修改了宿主機(jī)的/etc/resolv.conf過(guò)濾后的內(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將無(wú)法使用該/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)文章
利用OpenVSwitch在多臺(tái)主機(jī)上部署Docker的教程
這篇文章主要介紹了利用OpenVSwitch在多臺(tái)主機(jī)上部署Docker的教程,包括配置多個(gè)容器的IP地址等內(nèi)容,需要的朋友可以參考下2015-03-03在wsl-ubuntu中如何通過(guò) docker 啟動(dòng) gpu-jupyter
這篇文章主要介紹了在wsl-ubuntu中如何通過(guò) docker 啟動(dòng) gpu-jupyter,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01本地Docker部署Navidrome音樂(lè)服務(wù)器與遠(yuǎn)程訪問(wèn)聽(tīng)歌詳細(xì)教程(圖文詳解)
本文和大家分享一款目前在G站有11K+Star的開(kāi)源跨平臺(tái)音樂(lè)服務(wù)器?Navidrome,如何在?Linux?環(huán)境本地使用?Docker?部署,并結(jié)合cpolar?內(nèi)網(wǎng)穿透工具配置公網(wǎng)地址,實(shí)現(xiàn)隨時(shí)隨地遠(yuǎn)程訪問(wèn)本地存儲(chǔ)音樂(lè)的詳細(xì)流程,感興趣的朋友跟隨小編一起看看吧2024-08-08如何在 Ubuntu 下通過(guò) Docker 部署 Caddy 
本文介紹了如何在Ubuntu系統(tǒng)下通過(guò)Docker部署Caddy服務(wù)器,首先安裝Docker,然后啟動(dòng)Docker服務(wù)并設(shè)置為開(kāi)機(jī)自啟,接著拉取Caddy鏡像,并創(chuàng)建一個(gè)Caddyfile配置文件,使用命令運(yùn)行Caddy容器,并將本地的Caddyfile掛載到容器內(nèi),感興趣的朋友跟隨小編一起看看吧2025-03-03如何使用?docker?搭建一個(gè)?mysql?服務(wù)
這篇文章主要介紹了如何使用?docker?搭建一個(gè)mysql服務(wù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09