Docker dns nameserver 也是進入容器網絡空間,監聽53端口,但它通過iptable把端口映射到宿主機上,處理DNS請求的進程就在宿主機上。
how does Docker Embedded DNS resolver work?
獲得容器的進程號
container-namespaces-deep-dive-container-networking/中做了詳細的介紹。
$ pid = "$(docker inspect -f '{ {.State.Pid} }' "container_name | Uuid")"
方法1
創建netns
ip netns
會到/var/run/netns目錄下尋找network namespace,把容器進程中netns連接到這個目錄中后,ip netns
才會感知到。
$ sudo mkdir -p /var/run/netns
$ sudo ln -sf /proc/$pid/ns/net "/var/run/netns/container_name or uuid"
docker默認不會創建這個鏈接,需要手動創建。
這時候執行ip netns,就應當看到鏈接過來的network namespace,例如鏈接的名字為pause
:
$ip netns
pause (id: 1)
在容器的netns中執行命令
sudo ip netns exec "container name | uuid" ip a
方法2
用nsenter到進程$pid的network namespace中執行命令。
nsenter -t $pid -n /bin/sh
連接nsenter中對nsenter做了更多的說明。
參考:
docker networking namespace not visible in ip netns list