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

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-21
  • 2021-08-01
  • 2021-09-23
  • 2021-12-31
猜你喜欢
  • 2021-11-05
  • 1970-01-01
  • 2022-12-23
  • 2022-12-23
  • 2021-06-22
  • 2021-07-14
  • 2022-12-23
相关资源
相似解决方案