2016-07-04 14 views
2

Ich habe gerade Docker auf meinem Rechner & haben ein Nginx/PHP7 (FPM)/MySQL-Setup funktioniert alles gut, aber mit Xdebug auf dem PHP-Container kann ich nicht bekommen es um eine Verbindung zu PHPStorm auf meinem Host-Rechner herzustellen.Xdebug kann nicht zurück zu Docker Host verbinden

Hier ist mein PHP Xdebug Config ...

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts- 
20151012/xdebug.so 
xdebug.remote_log=/usr/local/var/log/xdebug.log 
xdebug.remote_enable=1 
xdebug.remote_host=192.168.99.1 
xdebug.remote_port=9000 
xdebug.remote_connect_back=1 
xdebug.remote_handler=dbgp 
xdebug.remote_mode=req 
xdebug.remote_autostart=true 

Beim Surfen mit dem Xdebug Cookie-Set für den Behälter ermöglichen, gibt es keine Eingabeaufforderung für eine Verbindung. Wenn ich eine lokal gehostete Site durchsuche, gibt es das, also weiß ich, dass PHPStorm richtig zuhört.

auf dem lokalen Rechner, kann ich auf Port 9000 ... telnet

$ telnet 192.168.99.1 9000 
Trying 192.168.99.1... 
Connected to 192.168.99.1. 
Escape character is '^]'. 
^] 
telnet> quit 
Connection closed. 

... aber ich kann von nicht entweder der boot2docker VM oder den Behälter. Wenn ich es versuche, sitze ich einfach da und tue nichts. Sowohl die VM als auch der Container können jedoch den Host-Computer gut pingen.

Ich habe versucht, die Firewall meines Mac zu deaktivieren, aber immer noch keine Freude.

Ich bin mir nicht sicher, wie Sie die Firewall auf der boot2docker VM deaktivieren.

Jeder Einblick, warum dies nicht funktioniert, wäre sehr willkommen. Danke im Voraus.

Antwort

0

Sie müssen ein Netzwerk verwenden, das von Ihrem Docker-Host auf Ihren Mac überbrückt wird. Tun Sie ifconfig auf dem Mac und suchen Sie nach der lokalen IP in anderen lokalen Netzwerken, z. B. 10.0.1.13. (. Die Besonderheiten von Version von Docker unterscheiden können, aber dies mit einer Vagrant als Docker Wirt gearbeitet und sollte für die meisten VMs arbeiten)

+0

Danke für den Tipp. Ich habe einen überbrückten n/w-Adapter auf meinem drahtlosen Adapter hinzugefügt, und ich kann einen neuen Adapter in der Docker-VM mit der IP-Adresse 192.168.1.18 (Host ist 192.168.1.6) sehen, aber ich kann immer noch nicht telnet von die VM oder der Container. Kannst du mehr Details dazu geben, wie du das richtig einrichtest? – TobyG

+0

Sie brauchen keine weitere Brücke. Hast du einen anderen Port versucht, übrigens? FPM verwendet möglicherweise 9000, sodass Konflikte auftreten können. Versuchen Sie es mit 10000 oder ähnlichem. Sie können auch 'nc -l 8888' auf Ihrem Mac und telnet aus dem Container ausführen, um sicherzustellen, dass es unabhängig von xdebug funktioniert. – ldg

+0

Stellt sich heraus, dass die VM neu erstellt wurde. Ich hatte alles andere versucht. Am Ende entfernte ich die VM, entfernte alle nur Host-Netzwerke und erstellte die VM neu. Wenn alles andere fehlschlägt ... reboot! – TobyG

1

Xdebug empfohlen Config innen Container:

zend_extension = xdebug.so 
xdebug.remote_enable = 1 
xdebug.remote_connect_back = 0 
xdebug.remote_host = docker.for.mac.localhost 
xdebug.remote_port = 9000 
xdebug.remote_handler = dbgp 
xdebug.remote_mode = req 
xdebug.remote_autostart = 1 
xdebug.idekey = PHPSTORM 

Seit Docker-17.06, Sie kann Dienste über die statischen Hostnamen auf Mac innerhalb Container, gehosteten Zugang: docker.for.mac.localhost

iCH WILL aUF dER HOST aus einem Behälter zu einem Service verbinden?
Der Mac hat eine sich ändernde IP-Adresse (oder keine, wenn Sie keinen Netzwerkzugriff haben). Ab 17.06 besteht die Empfehlung, sich mit dem speziellen Mac-Only-DNS-Namen docker.for.mac.localhost zu verbinden, der auf die interne IP-Adresse des Hosts aufgelöst wird.

siehe https://docs.docker.com/docker-for-mac/networking/#i-cannot-ping-my-containers