Docker系列教程17-預設bridge網路中配置DNS
本節描述如何在Docker預設網橋中配置容器DNS。 當您安裝Docker時,就會自動建立一個名為bridge
的橋接網路。
注意 : Docker網路功能 允許您建立除預設網橋之外的使用者自定義網路。 有關使用者自定義網路中DNS配置的更多資訊,請參閱Docker嵌入式DNS 部分。
Docker如何為每個容器提供主機名和DNS配置,而無需在構建自定義Docker映象時在內部寫入主機名?它的訣竅是利用可以寫入新資訊的虛擬檔案,在容器內覆蓋三個關鍵的/etc
檔案。 你可以通過在一個容器中執行mount
來看到這一點:
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 ...
...
這樣一來,Docker可以讓宿主機在稍後通過DHCP接收到新的配置後,使所有容器中的resolv.conf
保持最新狀態。 Docker在容器中維護這些檔案的具體細節可能會可能會隨著Docker版本的演進而改變,因此您不該自己管理/etc檔案,而應該用以下Docker選項。
四個不同的選項會影響容器域名服務。
引數 | 描述 |
---|---|
-h HOSTNAME or --hostname=HOSTNAME
|
設定容器的主機名。 該設定的值將會被寫入/etc/hostname ;寫入/etc/hosts 作為容器的面向主機IP地址的名稱(筆者按:在/etc/hosts裡新增一條記錄,IP是宿主機可以訪問的IP,host就是你設定的host),並且是容器內部/bin/bash 在其提示符下顯示的名稱。 但主機名不容易從容器外面看到。 它不會出現在docker ps 或任何其他容器的/etc/hosts 檔案中。 |
--link=CONTAINER_NAME or ID:ALIAS
|
在run 容器時使用此選項為新容器的/etc/hosts 新增了一個名為ALIAS 的額外條目,指向由CONTAINER_NAME_or_ID 標識的CONTAINER_NAME_or_ID 的IP地址。這使得新容器內的程式可以連線到主機名ALIAS 而不必知道其IP。 --link= 選項將在下面進行更詳細的討論。 因為Docker可以在重新啟動時為連結的容器分配不同的IP地址,Docker會更新收件人容器的/etc/hosts 檔案中的ALIAS 條目。 |
--dns=IP_ADDRESS... |
在容器的/etc/resolv.conf 檔案新增nameserver 行,IP地址為指定IP。 容器中的程式在如果需要訪問/etc/hosts 裡的主機名,就會連線到這些IP地址的53埠,尋找名稱解析服務。 |
--dns-search=DOMAIN... |
通過在容器的/etc/resolv.conf 寫入search 行,在容器內使用裸不合格的主機名時搜尋的域名。 當容器程式嘗試訪問host 並且搜尋域example.com 被設定時,例如,DNS邏輯不僅將查詢host ,還將查詢host.example.com 。使用--dns-search=. 如果您不想設定搜尋域。 |
--dns-opt=OPTION... |
通過將options 行寫入容器的/etc/resolv.conf 設定DNS解析器使用的選項。有關有效選項的列表,請參閱resolv.conf 文件 |
在沒有--dns=IP_ADDRESS...
, --dns-search=DOMAIN...
或--dns-opt=OPTION...
選項的情況下,Docker使每個容器的/etc/resolv.conf
看起來像宿主機的/etc/resolv.conf
。當建立容器的/etc/resolv.conf
,Docker daemon會從主機的原始檔案中過濾掉所有localhost IP地址nameserver
條目。
過濾是必要的,因為主機上的所有localhost地址都不可從容器的網路中訪問。 過濾之後,如果容器的/etc/resolv.conf
檔案中沒有更多的nameserver
條目,Docker daemon會將Google DNS名稱伺服器(8.8.8.8和8.8.4.4)新增到容器的DNS配置中。 如果守護程式啟用了IPv6,則也會新增公共IPv6 Google DNS名稱伺服器(2001:4860:4860::8888 和 2001:4860:4860::8844)。
注意 :如果您需要訪問主機的localhost解析器,則必須在主機上修改DNS服務,以便偵聽從容器內可訪問的non-localhost地址。
您可能會想知道宿主機的/etc/resolv.conf
檔案發生了什麼變化。 docker daemon
有一個檔案更改通知程式,它將監視主機DNS配置的更改。
注意 :檔案更改通知程式依賴於Linux核心的inotify功能。由於此功能目前與overlay檔案系統驅動不相容,因此使用“overlay”的Docker daemon將無法利用
/etc/resolv.conf
自動更新的功能。
當宿主機檔案更改時,所有resolv.conf
與主機匹配的停止的容器將立即更新到最新的主機配置。 當宿主機配置更改時,執行的容器將需要停止並開始接收主機更改,這是由於缺少裝置,以確保在容器執行時對resolv.conf
檔案的原子寫入。 如果容器修改了預設的resolv.conf
檔案,則不會替換該檔案,因為如果替換,將會覆蓋容器執行的更改。 如果選項( --dns
, --dns-search
或--dns-opt
)已被用於修改預設的主機配置,則更換主機的/etc/resolv.conf
也不會發生。
注意 :對於在Docker 1.5.0中實現
/etc/resolv.conf
更新功能之前建立的容器:當主機resolv.conf
檔案更改時,這些容器將不會收到更新。 只有使用Docker 1.5.0及以上版本建立的容器才能使用此自動更新功能。
英文原文
https://docs.docker.com/engine/userguide/networking/default_network/configure-dns/
擴充閱讀
Docker儲存驅動的選擇:https://docs.docker.com/engine/userguide/storagedriver/selectadriver/#docker-ce
本文首發
http://www.itmuch.com/docker/18-docker-user-network-embeded-dns/
乾貨分享
相關文章
- docker容器網路bridgeDocker
- Docker-Bridge Network 03 自定義網路Docker
- docker的網路-單主機(三種原生網路)none、host、bridgeDockerNone
- [Docker 系列]docker 學習八,Docker 網路Docker
- 【linux】【docker】Docker預設網段配置導致無法訪問LinuxDocker
- Docker 基礎 : 網路配置Docker
- 雲解析DNS為什麼要配置預設線路?(中科三方)DNS
- Linux網路配置方法(DNS,IP,GW)LinuxDNS
- docker系列(五):網路通訊Docker
- 詳解 Docker 容器網路配置Docker
- hosts和DNS等網路設定DNS
- docker修改預設映象、容器路徑Docker
- 為什麼配置智慧DNS解析的時候一定要有預設線路?DNS
- Docker網路配置基礎知識Docker
- docker + rabbitmq 配置教程DockerMQ
- 在Docker中,如何更改Docker的預設儲存設定?Docker
- Linux中DNS配置LinuxDNS
- Centos7網路配置教程CentOS
- docker 運用 gpu 網路相關配置DockerGPU
- C#設計模式系列:橋接模式(Bridge)C#設計模式橋接
- Java配置17-配置Nginx代理多個前端專案JavaNginx前端
- DNS解析是什麼?DNS解析在網路通訊中作用有哪些?DNS
- DNS是什麼?DNS在網路通訊中的作用是什麼?DNS
- Docker配置代理訪問網路ubuntu24.04DockerUbuntu
- 關於Docker中網路效能疑惑Docker
- 百度App網路深度優化系列《一》DNS優化APP優化DNS
- [Docker二]DNSDockerDNS
- Nginx配置網站預設httpsNginx網站HTTP
- Docker系列教程14-Docker資料持久化Docker持久化
- Linux中MYSQL5.7預設配置my.cnf存放路徑LinuxMySql
- Docker 網路Docker
- Docker網路Docker
- Docker框架的使用系列教程(二)Docker框架
- Docker框架的使用系列教程(三)Docker框架
- Linux網路中的DNS域名正向解析實操LinuxDNS
- kvm網路,docker網路,,vm網路Docker
- Flutter開發系列教程之網路請求Flutter
- Docker 從入門到精通(三)一 網路配置Docker