Docker port mapping (-p) gives an iptables error on RHEL 7.2 | 도커 포트 매핑 iptables 에러

Q.

포트를 매핑해서 컨테이너를 실행할 때마다 iptables 에러가 나요.

docker: Error response from daemon: driver failed programming external connectivity on endpoint naughty_babbage (ca698c082b2ffe55229b7183a1588100a2011f82df0e718f16274e02a6cf26fb): iptables failed: iptables –wait -t nat -A DOCKER -p tcp -d 0/0 –dport 8080 -j DNAT –to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1).

호스트 모드는(–net=host) 잘 돌아가요.

 

A.

docker#16816랑 같은 문제로 보이네요. 호스트에서 실행 중인 firewalld와의 상호작용 문제로 보이는데, 도커가 실행된 이후에 firewalld가 돌아갔을 때로 보입니다. 도커를 재시작하면 iptables 룰을 다시 만들기 때문에 해결 될 것 같아요.

iptables 룰이 생성되지 않은 다른 이유가 있을 수 있으니 도커 데몬 로그를 확인해보는 것도 좋겠네요.

 

주석:

도커가 실행될 때 현재 iptables 룰에 도커가 필요로 하는 포트와 체인이 추가됩니다. firewalld처럼 iptables를 건드리는 친구들은 도커가 뭘 필요로 하는지 관심이 없기 때문에 도커 이후에 실행되면 iptables 룰을 자기가 아는대로만 구성해버립니다. 도커에게 필요한 포트/체인 룰이 없는 상태가 되지요. 실행 스크립트를 만들 때 iptables 관련 서비스들과 도커의 실행 순서에 유의해야겠습니다.

 

원문: https://github.com/moby/moby/issues/23154

193 Comments

  1. Aw, this was a actually good publish. In principle I want to set in producing like this furthermore – taking time and actual work to make an excellent article… but what can I say… I procrastinate alot and not at all seem to get some thing accomplished.