從宿主機直接進入docker容器的網絡空間


 Docker dns nameserver 也是進入容器網絡空間,監聽53端口,但它通過iptable把端口映射到宿主機上,處理DNS請求的進程就在宿主機上。

how does Docker Embedded DNS resolver work?

參考: 如何進入容器和網絡的netns命名空間

 

獲得容器的進程號

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM