Rocky Linux 또는 RHEL 계열 서버에서 Docker Compose를 실행할 때 아래와 같은 오류 메시지가 나타난다면, iptables 설정과 관련된 커널 모듈 문제일 수 있습니다.

1
failed to create network nginx_default: Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-xxxx -j RETURN: iptables: No chain/target/match by that name. (exit status 1))

원인

Docker는 기본적으로 bridge 네트워크 드라이버를 사용할 때 iptablesDOCKER 체인을 활용해 네트워크 NAT 규칙을 설정합니다. 하지만 다음과 같은 조건 중 하나라도 충족되면 문제가 발생할 수 있습니다.

  • 커널 모듈 br_netfilter 또는 bridge가 로딩되지 않음
  • iptablesnftables 간 충돌
  • 컨테이너가 네트워크 생성 이전에 실행됨
  • 시스템이 iptables-nft 백엔드를 사용하는 중

해결 방법

1. 커널 모듈 확인 및 로딩

1
2
sudo modprobe br_netfilter
sudo modprobe bridge

로드 확인:

1
2
lsmod | grep br_netfilter
lsmod | grep bridge

부팅 시 자동 로딩 설정:

1
echo -e "br_netfilter\nbridge" | sudo tee /etc/modules-load.d/docker.conf

2. iptables 백엔드를 legacy로 전환

Docker는 여전히 iptables-legacy를 선호합니다. 시스템에서 iptables-nft를 사용 중이라면 다음 명령으로 전환할 수 있습니다.

1
sudo alternatives --config iptables

출력 예시:

1
2
3
4
5
6
7
8
There are 2 programs which provide 'iptables'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/iptables-nft
   2           /usr/sbin/iptables-legacy

Enter to keep the current selection[+], or type selection number: 2

동일한 방식으로 다음 항목도 설정합니다:

1
2
3
sudo alternatives --config ip6tables
sudo alternatives --config arptables
sudo alternatives --config ebtables

3. Docker 재시작

iptables 백엔드나 커널 모듈을 변경한 경우 Docker를 재시작해야 반영됩니다.

1
sudo systemctl restart docker

해결되지 않는 경우

  • firewalld 또는 nftables가 활성화되어 있다면, Docker와 충돌이 발생할 수 있습니다. 이 경우 firewalld를 비활성화하거나 iptables 전용으로 설정을 조정해야 합니다.
  • KVM 기반 VM에서 네트워크가 브리지로 설정되어 있을 경우, 호스트 커널에서 관련 모듈 로딩이 제한되는 경우도 있으므로 확인이 필요합니다.

결론

Docker Compose 실행 중 발생하는 네트워크 오류는 대부분 iptables 또는 커널 네트워크 모듈 설정 문제로 인해 발생합니다. 위 단계를 순차적으로 적용하면 대부분의 문제를 해결할 수 있으며, 특히 RHEL/Rocky Linux 계열에서는 iptables-legacy 설정이 핵심입니다.