Sous l'IP suivant, mon conteneur a été exécuté avec succès dans mon navigateur Web.
J'ai également créé un volume pour partager des fichiers entre mon conteneur et mon système de fichiers
docker run --name lampf -d -p 32775:80 -v /Users/sja/Sites/lamkepf2:/var/www/html --link=lampf_db:db codinglimo/Apache_php540_gs_imgmck_pdflib9
Maintenant, j'installe aussi xDebug avec succès dans mon conteneur avec le fichier xdebug.ini suivant
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_Host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/temp/profiledir"
PHPStorm est également configuré
http://img2.picload.org/image/iowdpww/xdebug.png
Mais mes points d'arrêt dans mon index.php sont ignorés? Quelle est mon erreur?
Le problème est résolu avec l'aide de Sergey
Mon nouveau xdebug.ini
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
xdebug.remote_enable=on
#xdebug.remote_Host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_connect_back=On
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/temp/profiledir"
Votre conteneur Docker ne peut pas voir votre PHP Storm IDE avec l’IP 127.0.0.1, généralement l’hôte est 172.17.42.1 depuis un conteneur. De plus, remote_connect_back ne fonctionnera probablement pas bien. Essayez de le configurer comme ceci:
xdebug.remote_Host=172.17.42.1
xdebug.remote_connect_back=Off
Vous devrez peut-être rechercher un moyen approprié de connaître l'adresse IP de l'hôte dans votre conteneur. 172.17.42.1 n'est que l'adresse par défaut, mais il se peut que ce ne soit pas toujours le cas.
Cela a fonctionné pour moi juste d'exécuter à l'intérieur du conteneur:
pecl install -o -f xdebug \
&& rm -rf /tmp/pear \
&& echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_Host=172.17.42.1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_connect_back=On" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "memory_limit = 64M" > /usr/local/etc/php/conf.d/php.ini
Et ensuite, redémarrer le conteneur.
172.17.42.1 est l'adresse IP par défaut de l'hôte, lorsque vous exécutez Docker . Vous pouvez obtenir l'adresse IP de votre hôte s'exécutant dans le conteneur:
/sbin/ip route|awk '/default/ { print $3 }'
J'ai trouvé une solution plus automatiséeDans mon ENTRYPOINT, j'ai exécuté le script startServices
#!/bin/bash
Host_IP=`/sbin/ip route | awk '/default/ { print $3 }'`
head -n -1 /etc/php5/mods-available/xdebug.ini > /etc/php5/mods-available/xdebug.tmp
echo "xdebug.remote_Host="$Host_IP >> /etc/php5/mods-available/xdebug.tmp
rm /etc/php5/mods-available/xdebug.ini
mv /etc/php5/mods-available/xdebug.tmp /etc/php5/mods-available/xdebug.ini
/usr/bin/supervisord
Il prend l'adresse IP actuelle de la machine hôte et remplace la ligne dans xdebug.ini, puis lance le superviseur qui lance tout le matériel
Mon xdebug.ini initial
zend_extension=xdebug.so
[xdebug]
; priority=999
xdebug.remote_autostart=true
xdebug.remote_enable = On
xdebug.remote_connect_back = Off
xdebug.remote_port = 9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.var_display_max_data = 2048
xdebug.var_display_max_depth = 128
xdebug.max_nesting_level = 500
xdebug.remote_Host=127.0.0.1
Après avoir exécuté le script, je vais obtenir quelque chose comme ça
zend_extension=xdebug.so
[xdebug]
; priority=999
xdebug.remote_autostart=true
xdebug.remote_enable = On
xdebug.remote_connect_back = Off
xdebug.remote_port = 9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.var_display_max_data = 2048
xdebug.var_display_max_depth = 128
xdebug.max_nesting_level = 500
xdebug.remote_Host=172.17.0.1
Où 172.17.0.1 est mon hôte actuel