如何在 docker-compose 文件中动态获取主机 ip?

How to get the host ip dynamically in a docker-compose file?

对于 docker 开发环境,我们使用 docker-compose-file。一切正常,我们真的很高兴,但我需要解决一个小问题:

我们用 xdebug 安装 php-fpm。现在我们配置如下:

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

docker-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 进行调试。唯一的问题是,我们在 docker-compose-file 中静态保存了一个 IP“192.168.0.50”。所以每个员工都必须在运行...

之前将其更改为自己的IP

现在问题: 有没有更聪明的方法在构建时动态获取主机 IP 地址?

没有 "magic command" 可以获得主机 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.

祝你好运:)

host.docker.internal

"From 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker Desktop for Mac [or Docker Desktop for Windows]"

docker-for-mac

docker-for-windows