2016-08-25 13 views
7

Po przełączeniu z Docker Machine na Docker dla Mac xdebug przestał działać. Port 9000 na hoście jest nieosiągalny z kontenera z xdebug.
php.ini:
xdebug nie działa w Docker dla komputerów Mac

xdebug.remote_enable=1 
xdebug.remote_port=9000 
xdebug.remote_host=172.18.0.1 
xdebug.idekey=PHPSTORM 

dokowanym-compose.yml:

version: '2' 
services: 
    php: 
    image: <image name> 
    ports: 
     - 80:80 
    # - 9000:9000 
    volumes: 
     - .:/var/www/html 
     - ./php.ini:/usr/local/etc/php/conf.d/php.ini 

xdebug.log:

I: Checking remote connect back address. 
I: Checking header 'HTTP_X_FORWARDED_FOR'. 
I: Checking header 'REMOTE_ADDR'. 
I: Remote address found, connecting to 172.18.0.1:9000. 
E: Could not connect to client. :-(

Aby rozwiązać mój problem?

Odpowiedz

7

Mam ten sam problem. Może to być związane z ograniczeniami funkcji dokowania w systemie OSX. Zobacz te linki.

https://docs.docker.com/docker-for-mac/networking/ https://forums.docker.com/t/explain-networking-known-limitations-explain-host/15205

Możliwe obejścia zostały również sugerowane. Jednym z nich jest utworzenie urządzenia z nowym adresem IP (na przykład 10.254.254.254), który będzie wracał do ciebie localhost. Kiedy następnie użyjesz tego adresu IP jako zdalnego adresu hosta zamiast tego przypisanego przez doker (127.0.0.1 lub 172.17.0.2), powinno to wystarczyć. Postępuj zgodnie z this link dla zakodowanego rozwiązania

+0

Tnaks !!! Pomogło mi! –

+3

Dzięki. Istota (https://gist.github.com/ralphschindler/535dc5916ccbd06f53c1b0ee5a868c93), którą wysłałeś, działa doskonale. –

1

Zmień plik docker-compose.yml na poniższy.

Będziesz chciał odsłonić port 9000, bez wiązania. Również zaktualizuj swoje xdebug ini do ip twojego hosta (mac), a nie ip docker.

Dodałem także, w jaki sposób można zamontować plik xdebug z komputera Mac bezpośrednio do okna dokowanego, aby można było go aktualizować w locie. Pozwala to na większą kontrolę, ponieważ może być konieczne zaktualizowanie twojego ip na podstawie przejścia z wifi na wifi. Xdebug.remote_host = ip powinno być twoją siecią lokalną IP ip. Po prostu pamiętaj, jeśli używasz Apache, aby wykonać service apache2 restart lub odpowiednie polecenie, aby ponownie uruchomić serwer za każdym razem, gdy zmienisz adres IP.

version: '2' 
services: 
    php: 
    image: <image name> 
    ports: 
     - 80:80 
    expose: 
     - "9000" 
    volumes: 
     - .:/var/www/html 
     - ./php.ini:/usr/local/etc/php/conf.d/php.inivolumes: 
     - ./20-xdebug.ini:/etc/php/7.1/cli/conf.d/20-xdebug.ini //obviously you would change this to your correct paths 
     - ./20-xdebug.ini:/etc/php/7.1/apache2/conf.d/20-xdebug.ini //obviously you would change this to your correct paths 


# 20-xdebug.ini, this is how mine is setup. 
zend_extension = /usr/lib/php/20160303/xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_host=192.168.0.4 // Make sure you use your host (mac) local ip, not the ip of docker. 
xdebug.remote_port=9000 
xdebug.idekey = PHPSTORM 
xdebug.remote_handler = dbgp 
xdebug.remote_autostart = 1 
xdebug.remote_log = /var/log/xdebug.log 
Powiązane problemy