Leaseweb: Nach dem Upgrade der VM von Ubuntu 14.04 auf 16.04 verweigert Docker Verbindungen zum lokalen Host

Leaseweb: Nach dem Upgrade der VM von Ubuntu 14.04 auf 16.04 verweigert Docker Verbindungen zum lokalen Host

Ich bin hier völlig ratlos. Nach dem Upgrade von 14.04 auf Ubuntu 16.04 auf dem virtuellen Server von Leaseweb akzeptiert Docker keine Verbindungen mehr zum lokalen Host. Mit dem ursprünglichen CouchBase-Server-Image funktioniert die Ausführung des folgenden Befehls auf meinem Laptop einwandfrei (Docker-Version 1.12.1, Build 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>

Wenn ich jedoch genau denselben Befehl auf meiner Ubuntu 16.04-VM ausführe, die auf Leaseweb gehostet wird (dieselbe Docker-Version 1.12.1, Build 23cf638), schlägt er fehl:

# 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

Wenn ich den Port jedoch für die Öffentlichkeit öffne, beginnt er zu funktionieren:

# 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

Der einzige Unterschied besteht in der letzten Zeile, destination anywhereVS localhost. Auf meinem Heimcomputer steht die entsprechende iptables-Regel jedoch localhostauch, und sie funktioniert. Tatsächlich sind die iptables-Regeln auf meinem Heimcomputer genau gleich, aber sie funktionieren. Der Heimcomputer verwendet einen neueren Kernel (4.8.0-34-generic vs. 4.4.0-59-generic auf der VM) und läuft auf Bare Metal vs. Paravirtualisierung auf der VM. Vielleicht ist das der Fall? Der Support sagt, dass das oben genannte auf der Ubuntu 14.04 VM einwandfrei funktioniert, vielleicht hätte ich nicht aktualisieren sollen ...

verwandte Informationen