2016-04-08 16 views
2

Ich bin 2 Docker Container mit der --net = Host-Option ausgeführt, so dass die Vernetzung transparent ist (Docker Container verwendet das gleiche Netzwerkgerät wie Host).Docker: Zugriff auf mysql im Docker Container mit --net = host Option vom Host

docker network inspect host 
[ 
    { 
     "Name": "host", 
     "Id": "32ddf8f58d520e49a0b3f296d6d03134b24d7c503309e1c35e04c248010aa64b", 
     "Scope": "local", 
     "Driver": "host", 
     "IPAM": { 
      "Driver": "default", 
      "Options": null, 
      "Config": [] 
     }, 
     "Containers": { 
      "0e41eb0b07d2751db99a204a3a69a2446bf5b869150bc5741df670e56dbce670": { 
       "Name": "sleepy_goldstine", 
       "EndpointID": "cc8f2c4da055ae7e608c127552f67753c319aeb603234c418a0ebe8958c1025a", 
       "MacAddress": "", 
       "IPv4Address": "", 
       "IPv6Address": "" 
      }, 
      "71de826121e7222020eec8be8b3a737f3297f8c3aa99d21f0f7016d6aca6f668": { 
       "Name": "tender_goodall", 
       "EndpointID": "2da0468dbaf1e6b877984cbeb6b2a775786259fec7e83eb373c1d25fe715e16f", 
       "MacAddress": "", 
       "IPv4Address": "", 
       "IPv6Address": "" 
      } 
     }, 
     "Options": {} 
    } 
] 

Ich kann auf mehrere Dienste in den Docker-Containern von außen zugreifen. Es gibt jedoch eine Sache, die nicht funktioniert, und ich fange an, mit der Schere zu laufen ...

Auf dem Docker Host gibt es eine MySQL-Datenbank auf Port 3306. Keine Probleme damit.

Docker Behälter 1 als auch auf Lauf mysqld Port 3307 und Andockfensters Behälter 2 weist an Port 3308

jedoch mysqld läuft,

mysql -P 3307 -u Benutzer -p Dbname Verwendung

Ich kann vom Host aus nicht auf die MySQL-Datenbanken zugreifen. Selbst wenn ich den Port für mysql zur Verfügung stelle, der in der ersten Docker-Instanz läuft, leitet er mich immer zur mysql-Datenbank auf dem Host. Es gibt keine Iptables-Regeln, die zu einem solchen Verhalten führen könnten. Das Ausschalten der Firewall ändert das Verhalten nicht.

In my.cnf funktioniert der mysql-Server an 0.0.0.0 gebunden (127.0.0.1) funktioniert auch nicht.

So bin ich verloren und hoffe, dass jemand eine Lösung sieht. Das Entfernen der Option --host = net und das Arbeiten mit Port-Exposing ist keine Option, da dies die Netzwerkleistung in den Containern verringert.

Bearbeiten: Vergessen zu erwähnen, dass die Datenbanken innerhalb der Docker-Container zugänglich sind und wie vorgesehen funktionieren. Die einzige Sache, die nicht funktioniert, ist die Verbindung von Host -> Docker wegen der Verbindung wird immer Host -> Host selbst mit dem Port aus dem Docker-Container gerichtet sein.

Antwort

2

Ich denke, es hat nichts mit Docker Netzwerk zu tun. Der MySQL-Client neigt dazu, den Unix-Socket auf dem Host-Rechner zu benutzen, der vom MySQL-Server verfügbar gemacht wird. Geben Sie dem Client die Host-IP-Adresse -h 127.0.0.1 an, um die Verwendung von TCP zu erzwingen.

+0

Sie sind mein Held! Gelöst! – Blacksheep

+0

@Blacksheep Ich bin froh, dass es geholfen hat :-) Ich traf dieses Problem viele Male mit SSH-Tunneling MySQL-Port zu localhost und immer gefragt, warum nicht das verdammte Ding funktioniert. Beachten Sie, dass es nicht funktioniert, wenn Sie 'localhost' bereitstellen. Hier ist eine Frage (http://serverfault.com/q/337818/226737) darüber, wie Sie den MySQL-Client so konfigurieren können, dass er erwartungsgemäß agiert. Und hier ist ein verwandter [MySQL Bug] (https://bugs.mysql.com/bug.php?id=31577). – saaj

Verwandte Themen