iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
DevOps

搞定Docker網路系列 第 4

Docker的網路-DNS篇

  • 分享至 

  • xImage
  •  

Docker的網路-DNS篇(1/2)

Docker的DNS議題,將分為幾個部份說明,也會測試幾個複雜的情境(如環境變數的情境)。

預設情境

Docker如果不做特別的設定時,DNS的設定都會抓HOST的設定,主要是抓:

  1. /etc/resolv.conf
  2. 沒指定container name,就會抓container id 作為container主機名稱

這邊分析一下,dns設定修改後,該使用什麼工具確認:

這邊經由HOST修改/etc/hosts檔案,新增一筆docker.local解析為172.17.0.1的紀錄

以下都先從HOST進行測試

  1. ping:ok

  1. nslookup:x

  1. curl:ok

後面確認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

客製hostname或dns設定

  1. 設定不一樣的dns server

只要run的時候增加--dns這個語法就可以指定dns server,不受HOST設定限制。

docker run --rm -it --dns=8.8.8.8 tedyang/ubuntu:1120912

  1. container name作為hostname

這邊簡單弄一個實驗架構:

docker run時指定的container name會作為該container的hostname,可以直接用來連線

  1. 指定hostname-ip對照

--add-host語法會將hostname:ip的資料增加到container裡頭的/etc/hosts

docker run --rm -it --add-host="docker.local:172.17.0.1" tedyang/ubuntu:1120912

  1. 共享/etc/hosts檔案

這個情境就是延續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。


上一篇
Docker的網路-固定IP
下一篇
Docker的網路-CoreDNS
系列文
搞定Docker網路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言