2017-09-15 2193 views
2

對於碼頭開發環境,我們使用的是docker-compose-file。一切工作正常,我們很高興,但有一個小問題,我會工作:如何在docker-compose文件中動態獲取主機ip?

我們安裝php-fpm與xdebug。現在我們進行如下配置:

PHP-Dockerfile:

FROM php:7.1-fpm 

RUN docker-php-ext-install pdo_mysql \ 
&& docker-php-ext-install json \ 
&& pecl install xdebug \ 
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name 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_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini 

泊塢窗,compose.yml:

services: 
    //[...] 
    php: 
    build: ./docker/php/ 
    container_name: dev-php 
    expose: 
     - 9000 
    volumes: 
     - .:/var/www/html 
    environment: 
     XDEBUG_CONFIG: remote_host=192.168.0.50 
     PHP_IDE_CONFIG: "serverName=docker" 

此設置正常工作:我們能夠與調試本地系統上的IDE中的xdebug。唯一的問題是,我們將一個IP「192.168.0.50」靜態保存在docker-compose文件中。所以每個員工HAST將其更改爲自己的IP運行前...

現在的問題是: 是有一個更聰明的方式建設時,動態獲取主機的IP地址?

+0

而不是無關的問題:爲什麼你需要暴露'9000'端口?你是否試圖從外部連接到php-fpm?它提供了什麼? – LazyOne

+0

看到這篇文章http://tarunlalwani.com/post/debugging-php-xdebug-docker/ –

+0

我使用phpstorm,我需要這個端口爲xdebug。 – j0nnybrav0

回答

2

有沒有「神奇的命令」,將獲得主機的IP地址,所以要解決這個問題的唯一途徑是解決與環境變量:

services: 
    //[...] 
    php: 
    build: ./docker/php/ 
    container_name: dev-php 
    expose: 
    - 9000 
    volumes: 
    - .:/var/www/html 
    environment: 
    XDEBUG_CONFIG: remote_host=${WORKER_IP} 
    PHP_IDE_CONFIG: "serverName=docker" 

然後通過.ENV文件傳遞這個變量:

https://docs.docker.com/compose/env-file/ 

更多您可以在文檔閱讀:

https://docs.docker.com/compose/environment-variables/#configuring-compose-using-environment-variables. 

好運: )

+0

嗨Krzysztof,並感謝您的回覆。不幸的是,docker-compose並沒有爲docker構建提供「-e」屬性(https://docs.docker.com/compose/reference/up/)。 目前,我唯一的工作方式是使用env文件,每個員工都有自己的設置 – j0nnybrav0

+0

是的,你說的對,對不起。答案已編輯。 –