Docker網(wǎng)絡(luò)如何配置dns
1. docker配置DNS方法
docker容器配置dns解析地址,我知道的有以下幾種辦法(優(yōu)先級從高到低):
- 啟動的時候加–dns=IP_ADDRESS;
- 守護(hù)進(jìn)程啟動參數(shù)中添加DOCKER_OPTS=“–dns 8.8.8.8” ;
- 在/etc/docker/deamon.json中添加dns信息(與守護(hù)進(jìn)程參數(shù)會沖突不能同時添加。);
- 使用宿主機(jī)的/etc/resolv.conf文件;
2. 默認(rèn)DNS配置
怎樣為Docker提供的每一個容器進(jìn)行主機(jī)名和DNS配置,而不必建立自定義鏡像并將主機(jī)名寫 到里面?
它的訣竅是覆蓋三個至關(guān)重要的在/etc下的容器內(nèi)的虛擬文件,那幾個文件可以寫入 新的信息。
你可以在容器內(nèi)部運(yùn)行mount看到這個:
$ 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. 啟動時配置dns參數(shù)
Options | Description |
---|---|
-h HOSTNAME or --hostname=HOSTNAME | 在該容器啟動時,將HOSTNAME設(shè)置到容器內(nèi)的/etc/hosts, /etc/hostname, /bin/bash提示中。 |
–link=CONTAINER_NAME or ID:ALIAS | 在該容器啟動時,將ALIAS和CONTAINER_NAME/ID對應(yīng)的容器IP添加到/etc/hosts. 如果 CONTAINER_NAME/ID有多個IP地址 ? |
–dns=IP_ADDRESS… | 在該容器啟動時,將nameserver IP_ADDRESS添加到容器內(nèi)的/etc/resolv.conf中。可以配置多個。 |
–dns-search=DOMAIN… | 在該容器啟動時,將DOMAIN添加到容器內(nèi)/etc/resolv.conf的dns search列表中??梢耘渲枚鄠€。 |
–dns-opt=OPTION… | 在該容器啟動時,將OPTION添加到容器內(nèi)/etc/resolv.conf中的options選項(xiàng)中,可以配置多個 |
如果docker run時不含--dns=IP_ADDRESS
…, --dns-search=DOMAIN
…, or --dns-opt=OPTION
…參數(shù),docker daemon會將copy本主機(jī)的/etc/resolv.conf
,然后對該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配置一個宿主機(jī)內(nèi)容器能ping通的IP。
如果宿主機(jī)的/etc/resolv.conf內(nèi)容發(fā)生改變,docker daemon有一個對應(yīng)的file change notifier會watch到這一變化,然后根據(jù)容器狀態(tài)采取對應(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將不會改變,直到該容器狀態(tài)變?yōu)閟topped.
- 如果容器啟動后修改過容器內(nèi)的/etc/resolv.conf,則不會對該容器進(jìn)行處理,否則可能會丟失已經(jīng)完成的修改,無論該容器為什么狀態(tài)。
- 如果容器啟動時,用了–dns, --dns-search, or --dns-opt選項(xiàng),其啟動時已經(jīng)修改了宿主機(jī)的/etc/resolv.conf過濾后的內(nèi)容,因此docker daemon永遠(yuǎn)不會更新這種容器的/etc/resolv.conf。
注意:
docker daemon監(jiān)控宿主機(jī)/etc/resolv.conf的這個file change notifier的實(shí)現(xiàn)是依賴linux內(nèi)核的inotify特性,而inotfy特性不兼容overlay fs,因此使用overlay fs driver的docker deamon將無法使用該/etc/resolv.conf自動更新的功能。
$ 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é)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用OpenVSwitch在多臺主機(jī)上部署Docker的教程
這篇文章主要介紹了利用OpenVSwitch在多臺主機(jī)上部署Docker的教程,包括配置多個容器的IP地址等內(nèi)容,需要的朋友可以參考下2015-03-03在wsl-ubuntu中如何通過 docker 啟動 gpu-jupyter
這篇文章主要介紹了在wsl-ubuntu中如何通過 docker 啟動 gpu-jupyter,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01本地Docker部署Navidrome音樂服務(wù)器與遠(yuǎn)程訪問聽歌詳細(xì)教程(圖文詳解)
本文和大家分享一款目前在G站有11K+Star的開源跨平臺音樂服務(wù)器?Navidrome,如何在?Linux?環(huán)境本地使用?Docker?部署,并結(jié)合cpolar?內(nèi)網(wǎng)穿透工具配置公網(wǎng)地址,實(shí)現(xiàn)隨時隨地遠(yuǎn)程訪問本地存儲音樂的詳細(xì)流程,感興趣的朋友跟隨小編一起看看吧2024-08-08如何在 Ubuntu 下通過 Docker 部署 Caddy 
本文介紹了如何在Ubuntu系統(tǒng)下通過Docker部署Caddy服務(wù)器,首先安裝Docker,然后啟動Docker服務(wù)并設(shè)置為開機(jī)自啟,接著拉取Caddy鏡像,并創(chuàng)建一個Caddyfile配置文件,使用命令運(yùn)行Caddy容器,并將本地的Caddyfile掛載到容器內(nèi),感興趣的朋友跟隨小編一起看看吧2025-03-03