docker iptables: No chain/target/match by that name 에러 발생 해결하기

Updated on

이 문제는 어디에선가 iptables -F 명령어로 iptables 를 초기화 하면서 docker network iptables 이 초기화되었기 때문이다.

iptables -t nat -L -n -v 명령어로 확인해보면 알 수 있다.

이 문제를 해결하려면 단순하게

systemctl restart docker

위 명령어로 도커를 재실행 해주면 된다.

나 같은 경우는 특정 커널에서 iptables -F 명령어를 입력하게 되어있기 때문에 도커와 같이 사용하려면, reboot 이후에 도커 서비스를 재시작 시켜줘야만 했다.

그런데 중간에도 iptables -F가 발생될때가 있었고,

이 문제를 해결하기 위해서 간단한 스크립트를 실행되게 했다.

/root/check-docker-iptables.sh

#!/bin/bash

# Docker chain이 있는지 확인
if ! iptables -t nat -L DOCKER >/dev/null 2>&1; then
    logger "Docker iptables chain missing, restarting Docker service"
    systemctl restart docker
else
    logger "Docker iptables chains are present"
fi

/etc/cron.d/docker-iptables

* * * * * root /root/check-docker-iptables.sh

이렇게 crontab 에 iptables 체크 후 docker 내용이 없으면, 도커를 재실행 시키게 만들었다.