這篇文章將為大家詳細(xì)講解有關(guān)如何在Docker默認(rèn)網(wǎng)橋中配置容器DNS,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有方城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
如何在Docker默認(rèn)網(wǎng)橋中配置容器DNS。 當(dāng)您安裝Docker時(shí),就會(huì)自動(dòng)創(chuàng)建一個(gè)名為bridge 的橋接網(wǎng)絡(luò)。
注意 : Docker網(wǎng)絡(luò)功能 允許您創(chuàng)建除默認(rèn)網(wǎng)橋之外的用戶自定義網(wǎng)絡(luò)。 有關(guān)用戶自定義網(wǎng)絡(luò)中DNS配置的更多信息,請(qǐng)參閱Docker嵌入式DNS 部分。
Docker如何為每個(gè)容器提供主機(jī)名和DNS配置,而無(wú)需在構(gòu)建自定義Docker鏡像時(shí)在內(nèi)部寫(xiě)入主機(jī)名?它的訣竅是利用可以寫(xiě)入新信息的虛擬文件,在容器內(nèi)覆蓋三個(gè)關(guān)鍵的/etc 文件。 你可以通過(guò)在一個(gè)容器中運(yùn)行mount 來(lái)看到這一點(diǎn):
root@f38c87f2a42d:/# 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 ... ...
這樣一來(lái),Docker可以讓宿主機(jī)在稍后通過(guò)DHCP接收到新的配置后,使所有容器中的resolv.conf 保持最新?tīng)顟B(tài)。 Docker在容器中維護(hù)這些文件的具體細(xì)節(jié)可能會(huì)可能會(huì)隨著Docker版本的演進(jìn)而改變,因此您不該自己管理/etc文件,而應(yīng)該用以下Docker選項(xiàng)。
四個(gè)不同的選項(xiàng)會(huì)影響容器域名服務(wù)。
參數(shù) | 描述 |
---|---|
-h HOSTNAME or --hostname=HOSTNAME | 設(shè)置容器的主機(jī)名。 該設(shè)置的值將會(huì)被寫(xiě)入/etc/hostname ;寫(xiě)入/etc/hosts 作為容器的面向主機(jī)IP地址的名稱(筆者按:在/etc/hosts里添加一條記錄,IP是宿主機(jī)可以訪問(wèn)的IP,host就是你設(shè)置的host),并且是容器內(nèi)部/bin/bash 在其提示符下顯示的名稱。 但主機(jī)名不容易從容器外面看到。 它不會(huì)出現(xiàn)在docker ps 或任何其他容器的/etc/hosts文件中。 |
--link=CONTAINER_NAMEor ID:ALIAS | 在run 容器時(shí)使用此選項(xiàng)為新容器的/etc/hosts 添加了一個(gè)名為ALIAS的額外條目,指向由CONTAINER_NAME_or_ID標(biāo)識(shí)的CONTAINER_NAME_or_ID的IP地址。這使得新容器內(nèi)的進(jìn)程可以連接到主機(jī)名ALIAS 而不必知道其IP。 --link=選項(xiàng)將在下面進(jìn)行更詳細(xì)的討論。 因?yàn)镈ocker可以在重新啟動(dòng)時(shí)為鏈接的容器分配不同的IP地址,Docker會(huì)更新收件人容器的/etc/hosts 文件中的ALIAS條目。 |
--dns=IP_ADDRESS... | 在容器的/etc/resolv.conf文件添加nameserver 行,IP地址為指定IP。 容器中的進(jìn)程在如果需要訪問(wèn)/etc/hosts 里的主機(jī)名,就會(huì)連接到這些IP地址的53端口,尋找名稱解析服務(wù)。 |
--dns-search=DOMAIN... | 通過(guò)在容器的/etc/resolv.conf寫(xiě)入search 行,在容器內(nèi)使用裸不合格的主機(jī)名時(shí)搜索的域名。 當(dāng)容器進(jìn)程嘗試訪問(wèn)host 并且搜索域example.com 被設(shè)置時(shí),例如,DNS邏輯不僅將查找host ,還將查找host.example.com 。使用--dns-search=. 如果您不想設(shè)置搜索域。 |
--dns-opt=OPTION... | 通過(guò)將options 行寫(xiě)入容器的/etc/resolv.conf 設(shè)置DNS解析器使用的選項(xiàng)。有關(guān)有效選項(xiàng)的列表,請(qǐng)參閱resolv.conf文檔 |
在沒(méi)有--dns=IP_ADDRESS... , --dns-search=DOMAIN...或--dns-opt=OPTION...選項(xiàng)的情況下,Docker使每個(gè)容器的/etc/resolv.conf 看起來(lái)像宿主機(jī)的/etc/resolv.conf 。當(dāng)創(chuàng)建容器的/etc/resolv.conf ,Docker daemon會(huì)從主機(jī)的原始文件中過(guò)濾掉所有l(wèi)ocalhost IP地址nameserver 條目。
過(guò)濾是必要的,因?yàn)橹鳈C(jī)上的所有l(wèi)ocalhost地址都不可從容器的網(wǎng)絡(luò)中訪問(wèn)。 過(guò)濾之后,如果容器的/etc/resolv.conf 文件中沒(méi)有更多的nameserver 條目,Docker daemon會(huì)將Google DNS名稱服務(wù)器(8.8.8.8和8.8.4.4)添加到容器的DNS配置中。 如果守護(hù)進(jìn)程啟用了IPv6,則也會(huì)添加公共IPv6 Google DNS名稱服務(wù)器(2001:4860:4860::8888 和 2001:4860:4860::8844)。
注意 :如果您需要訪問(wèn)主機(jī)的localhost解析器,則必須在主機(jī)上修改DNS服務(wù),以便偵聽(tīng)從容器內(nèi)可訪問(wèn)的non-localhost地址。
您可能會(huì)想知道宿主機(jī)的/etc/resolv.conf 文件發(fā)生了什么變化。 docker daemon 有一個(gè)文件更改通知程序,它將監(jiān)視主機(jī)DNS配置的更改。
注意 :文件更改通知程序依賴于Linux內(nèi)核的inotify功能。由于此功能目前與overlay文件系統(tǒng)驅(qū)動(dòng)不兼容,因此使用“overlay”的Docker daemon將無(wú)法利用/etc/resolv.conf 自動(dòng)更新的功能。
當(dāng)宿主機(jī)文件更改時(shí),所有resolv.conf 與主機(jī)匹配的停止的容器將立即更新到最新的主機(jī)配置。 當(dāng)宿主機(jī)配置更改時(shí),運(yùn)行的容器將需要停止并開(kāi)始接收主機(jī)更改,這是由于缺少設(shè)備,以確保在容器運(yùn)行時(shí)對(duì)resolv.conf 文件的原子寫(xiě)入。 如果容器修改了默認(rèn)的resolv.conf 文件,則不會(huì)替換該文件,因?yàn)槿绻鎿Q,將會(huì)覆蓋容器執(zhí)行的更改。 如果選項(xiàng)( --dns , --dns-search 或--dns-opt )已被用于修改默認(rèn)的主機(jī)配置,則更換主機(jī)的/etc/resolv.conf 也不會(huì)發(fā)生。
注意 :對(duì)于在Docker 1.5.0中實(shí)現(xiàn)/etc/resolv.conf 更新功能之前創(chuàng)建的容器:當(dāng)主機(jī)resolv.conf文件更改時(shí),這些容器將不會(huì)收到更新。 只有使用Docker 1.5.0及以上版本創(chuàng)建的容器才能使用此自動(dòng)更新功能。
關(guān)于“如何在Docker默認(rèn)網(wǎng)橋中配置容器DNS”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。