Leaseweb: VM을 Ubuntu 14.04에서 16.04로 업그레이드한 후 docker가 localhost에 대한 연결을 거부합니다.

Leaseweb: VM을 Ubuntu 14.04에서 16.04로 업그레이드한 후 docker가 localhost에 대한 연결을 거부합니다.

나는 여기서 완전히 헤매고 있습니다. Leaseweb 가상 서버의 14.04에서 Ubuntu 16.04로 업그레이드한 후 docker는 더 이상 localhost에 대한 연결을 허용하지 않습니다. 원본 CouchBase 서버 이미지를 사용하여 내 노트북에서 다음 명령을 실행하면 완벽하게 작동합니다(Docker 버전 1.12.1, 빌드 23cf638).

$ docker run --rm -ti --name couchbase-server -p 127.0.0.1:8091:8091 couchbase/server:community-4.5.0
Starting Couchbase Server -- Web UI available at http://<ip>:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs

$ curl localhost:8091
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>301 Moved Permanently</title></head><body><h1>Moved Permanently</h1><p>The document has moved <a href="http://localhost:8091/ui/index.html>here</a>.</p></body></html>

그러나 Leaseweb에서 호스팅되는 Ubuntu 16.04 VM(동일한 Docker Docker 버전 1.12.1, 빌드 23cf638)에서 동일한 명령을 실행하면 실패합니다.

# curl localhost:8091
curl: (7) Failed to connect to localhost port 8091: Connection refused
# netstat -tnlp|grep 8091
tcp        0      0 127.0.0.1:8091          0.0.0.0:*               LISTEN      7387/docker-proxy
# iptables -t nat -L                                                                                                                                                                  
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:https redir ports 8443
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere            !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        anywhere            
MASQUERADE  all  --  172.18.0.0/16        anywhere            
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:8091

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            
DNAT       tcp  --  anywhere             localhost            tcp dpt:8091 to:172.17.0.2:8091

그러나 포트를 공개적으로 열면 작동하기 시작합니다.

# docker run --rm -ti --name couchbase-server -p 8091:8091 couchbase/server:community-4.5.0
# netstat -tnlp|grep 8091
tcp6       0      0 :::8091                 :::*                    LISTEN      15434/docker-proxy
# curl localhost:8091
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>301 Moved Permanently</title></head><body><h1>Moved Permanently</h1><p>The document has moved <a href="http://localhost:8091/ui/index.html>here</a>.</p></body></html>
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:https redir ports 8443
DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
DOCKER     all  --  anywhere            !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        anywhere            
MASQUERADE  all  --  172.18.0.0/16        anywhere            
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:8091

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            
DNAT       tcp  --  anywhere             anywhere             tcp dpt:8091 to:172.17.0.2:8091

유일한 차이점은 마지막 줄인 destination anywhereVS 에 있습니다 localhost. 그러나 내 집 컴퓨터에서는 관련 iptables 규칙 localhost도 작동하며 작동합니다. 사실, 내 집 컴퓨터에서 iptables 규칙은 완전히 동일하지만 작동합니다. 홈 머신은 최신 커널(VM의 4.8.0-34-일반 및 4.4.0-59-일반)을 사용하고 VM의 베어메탈 및 반가상화에서 실행됩니다. 어쩌면 그럴까요? 지원팀에서는 위의 내용이 Ubuntu 14.04 VM에서 완벽하게 작동한다고 말합니다. 어쩌면 업그레이드하지 말았어야 했을 수도 있습니다...

관련 정보