Docker는 기본적으로 컨테이너의 네트워크 네임스페이스를 호스트의 runtime data에 추가하지 않는다 (/run의 tmpfs로 마운트 되는 /var/run을 의미함)

실행된 컨테이너의 pid로 심볼릭 링크를 만들어주면 컨테이너의 네트워크 네임스페이스를 확인 할 수 있다.

# 호스트 네트워크
root@docker1:~# ip -br -c a
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp0s3           UP             10.0.2.15/24 fe80::31:14ff:fe45:3203/64
enp0s8           UP             192.168.50.10/24 fe80::a00:27ff:fe7c:22c3/64
docker0          UP             172.17.0.1/16 fe80::42:23ff:fef8:ad75/64
vethca6cbca@if7  UP             fe80::e07c:f6ff:fe2c:6d25/64

root@docker1:~# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
71118483fd2e   ubuntu    "bash"    9 minutes ago   Up 9 minutes             sharp_panini
root@docker1:~# ip netns list  # 컨테이너가 실행 중인데 네트워크 네임스페이스가 조회되지 않는다.
root@docker1:~# pid="$(docker inspect -f '{{.State.Pid}}' "711184" )"
root@docker1:~# echo $pid
8719
root@docker1:~# ls -l /var/run/netns
total 0
root@docker1:~# ln -s /proc/$pid/ns/net /var/run/netns/ubuntu
root@docker1:~# ip netns list
ubuntu (id: 0)
root@docker1:~# ip netns exec ubuntu ip -br -c a
lo               UNKNOWN        127.0.0.1/8
eth0@if8         UP             172.17.0.2/16
root@docker1:~#

 

참고

https://platform9.com/blog/container-namespaces-deep-dive-container-networking/

+ Recent posts