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