Docker的DNS議題,將分為幾個部份說明,也會測試幾個複雜的情境(如環境變數的情境)。
Docker如果不做特別的設定時,DNS的設定都會抓HOST的設定,主要是抓:
這邊分析一下,dns設定修改後,該使用什麼工具確認:
這邊經由HOST修改/etc/hosts檔案,新增一筆docker.local解析為172.17.0.1的紀錄
以下都先從HOST進行測試
後面確認dns設定的效果,建議就使用ping來測試驗證了。
**注意,HOST設定的/etc/hosts在container裡頭是抓不到的:
**
docker run --rm -it tedyang/ubuntu:1120912
參考:
https://docs.docker.com/network/
Custom hosts, defined in /etc/hosts on the host machine, aren't inherited by containers.
dns server的設定也是抓host的/etc/resolv.conf
container_id的部份我們測試看看
可以看到id的全名,我們來把它當作hostname來測試看看
HOST端:x
container端:ok
只要run的時候增加--dns這個語法就可以指定dns server,不受HOST設定限制。
docker run --rm -it --dns=8.8.8.8 tedyang/ubuntu:1120912
這邊簡單弄一個實驗架構:
docker run時指定的container name會作為該container的hostname,可以直接用來連線
--add-host語法會將hostname:ip的資料增加到container裡頭的/etc/hosts
docker run --rm -it --add-host="docker.local:172.17.0.1" tedyang/ubuntu:1120912
這個情境就是延續HOST設定了/etc/hosts,但container並無法抓到,最簡單的方式就是用覆蓋檔案的方式來處理
docker run --rm -it -v /etc/hosts:/etc/hosts tedyang/ubuntu:1120912
目前設定的dns異動,除了在host的/etc/resolv.conf或/etc/hosts異動外,基本上都只影響container,不會影響host,而基本上container只抓hosts的/etc/resolv.conf設定,除非用volume mapping,不然不會吃/etc/hosts。