본문 바로가기

docker

[docker][error] 라즈베리파이에서 컨테이너 실행시 네트워크 에러

docker 컨테이너를 실행시키면 네트워크가 끊기는 문제가 발생했다. ssh 세션이 그대로 끊어지고 ping도 도달하지 않는 것이었다.

raspberry os에서만 해당되는듯 하다.

apt를 통하여 docker를 설치했는데, 레퍼런스를 보니 raspberry OS에서는 다른 방식으로 설치하는 경우가 많았다

환경

  • raspberry os 64bit
  • docker 20.10.7

인터페이스 정보

$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:8dff:fe95:5048  prefixlen 64  scopeid 0x20<link>
        ether 02:42:8d:95:50:48  txqueuelen 0  (Ethernet)
        RX packets 10  bytes 504 (504.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 27  bytes 3738 (3.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether e4:5f:01:1a:eb:20  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 359188  bytes 17963579 (17.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 359188  bytes 17963579 (17.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethad84546: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::2cb:9db2:d43:d40a  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::6492:80ff:fe30:b132  prefixlen 64  scopeid 0x20<link>
        ether 66:92:80:30:b1:32  txqueuelen 0  (Ethernet)
        RX packets 5  bytes 322 (322.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 36  bytes 4148 (4.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.13  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::e46e:e447:36de:831  prefixlen 64  scopeid 0x20<link>
        ether e4:5f:01:1a:eb:21  txqueuelen 1000  (Ethernet)
        RX packets 1312343  bytes 98633413 (94.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1256785  bytes 112423392 (107.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

컨테이너 실행 전 라우팅 정보

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    303    0        0 wlan0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.0.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

실행 후 라우팅 정보

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    208    0        0 veth27f89bb
default         192.168.0.1     0.0.0.0         UG    303    0        0 wlan0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.0.0     0.0.0.0         255.255.255.0   U     208    0        0 veth47f89bbip route
192.168.0.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

만약 컨테이너가 정상적으로 실행되었다면 위 테이블에서 1, 4행이 생성되지 않아야 한다
무언가 격리가 제대로 되지 않았나 예상이 된다.

라우팅 정보 삭제 테스트

sudo route del -net default gw 192.168.0.1 netmask 0.0.0.0 dev veth27a4e5c
sudo route del -net 192.168.0.0 gw 0.0.0.0 netmask 255.255.255.0 dev veth27a4e5c

위와 같이 추가된 라우팅 정보를 삭제해 주니 정상적으로 접근이 된다

정리

이 문제는 결국 해결하지 못하고 ubuntu OS로 변경하게 되었다.
만약 추후에 패키지 관리자 측에서 업데이트가 되면 자연스럽게 해결될지도 모르겠다.
사실 이전에는 docker가 정상 작동했었는데 왜 갑자기 안되는지는 모르겠다 (고정 ip로 변경하긴 했다)
혹시 같은 문제를 겪는 사람이 있을까 하여 포스팅한다