2017-04-10 125 views
3

我在Docker上運行PHP應用程序,我想使用XDebug進行調試。 在我的碼頭工人,撰寫添加以下線路中的phpfpm部分:Xdebug(Docker容器內部)忽略XDEBUG_CONFIG環境變量

environment: 
     XDEBUG_CONFIG: "remote_enable=1 remote_host=192.168.110.29 remote_port=9000 idekey=PHPSTORM remote_autostart=1" 
     PHP_IDE_CONFIG: "serverName=reports.dev" 

我以正確的方式配置PHPStorm,監聽端口9000和運行應用程序。

該應用程序完美地工作,但XDebug似乎沒有工作。

如果我將php.ini文件中的配置行移動到調試器中,除了服務器名稱爲空且我無法調試(這就是爲什麼我嘗試遵循docker-compose配置方式)的事實。

如果在Docker容器中運行echo $ XDEBUG_CONFIG,輸出是正確的,但是XDebug似乎不會讀取Env變量。

+0

1)你服務/嘗試調試網頁?如果是這樣的 - 配置的服務器名稱存在(尤其是如果它nginx的 - 很多時候它是空白)。 2)你如何啓動容器?我的意思是 - 您使用PhpStorm這個,或者它從外部(終端)進行管理? https://youtrack.jetbrains.com/issue/WI-33800 – LazyOne

+0

1)是的,我正在調試網頁,是的,nginx中的服務器名稱沒有定義,因爲代碼不在容器內,所以我有一個docker爲我所有的項目構成,我不願意改變它。 2)我使用在終端外phpstorm搬運工-構成的。 順便說一句,這並不回答我的問題,我不明白爲什麼沒有被Xdebug的容器內讀XDEBUG_CONFIG – sangio90

回答

2

我有同樣的問題。我的圖像基於nimmis/alpine-apache-php7/。我發現圖像使用supervisor來啓動進程。 supervisor不瞭解Docker環境變量。

要通知supervisor需要運行進程的約定是在/etc/sv/{process}/run處創建run腳本。 A script like this被用來啓動Apache。我需要更改腳本,以便在啓動Apache之前導入Docker環境變量。

docs for the base image解釋公約導入泊塢環境:

如果需要從泊塢窗命令行環境變量(-e, - ENV = [])添加

source /etc/envvars

然後在腳本文件中使用它們

所以我創建了my own custom run script for Apache - 我在httpd執行之前加了source /etc/envvars

我改寫the original run script,通過把一個簡單COPYmy Dockerfile

COPY apache-run.sh /etc/sv/apache2/run 

這成功地確保了我$XDEBUG_CONFIG是可見的httpd在它推出的時間。通過在網頁上打印phpinfo();,我能夠確認這會影響我的PHP配置。

0

你做了phpinfo();?這應該告訴你使用的設置。

我有同樣的問題......帶我永遠弄清楚。您是否在使用xdebug.remote_connect_back=1?如果這樣刪除該行。

我的nginx代理正在轉發IP(這是錯誤的),因此XDEBUG_CONFIG中的IP設置被忽略。

0

對我來說是使用官方的PHP-FPM-高山搬運工像一個不同的問題(FROM php:7-fpm-alpine

我需要對Xdebug的-CONFIG添加到FPM池配置: env[XDEBUG_CONFIG] = $XDEBUG_CONFIG

查看全部配置https://github.com/attrib/docker-symfony