首页 > 解决方案 > 通过 Docker-Compose 启用/禁用 xDebug,可以吗?

问题描述

我有以下内容Dockerfile

FROM php:7.2-apache
RUN apt-get update && apt-get install -y \
        zlib1g-dev \
        git \
        unzip \
    && rm -rf /var/lib/apt/lists/ \
    && docker-php-ext-install zip pdo_mysql bcmath \
    && a2enmod rewrite \
    && pecl install xdebug-2.9.0 redis \
    && docker-php-ext-enable xdebug redis \
    && mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" \
    && mv /var/www/html /var/www \
    && chown -R www-data:www-data /var/www/ \
    && ln -s /usr/local/bin/php /usr/bin/php
COPY --from=composer:1.9 /usr/bin/composer /usr/bin/composer
WORKDIR /var/www/drm-case
CMD ["docker/apache/bootstrap.sh"]

这是docker-compose.yml使用前一个Dockerfile来构建容器的文件(尽管并非一直如此):

version: "2.4"

services:
  case-v2-apache:
    container_name: local-dev
    image: local-dev:1.6 # increase this number when changing the Dockerfile
    depends_on:
      mysql-server:
        condition: service_healthy
    volumes:
      - ${LOCAL_PATH}:/var/www:delegated
      - ${LOCAL_PATH}/docker/apache/conf.d:/usr/local/etc/php/conf.d
      - ${LOCAL_PATH}/docker/apache/conf-enabled/servername.conf:/etc/apache2/conf-enabled/servername.conf
      - ${LOCAL_PATH}/docker/apache/sites-available/000-default.conf:/etc/apache2/sites-available/000-default.conf
    ports:
      - "8009:80"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    build:
      context: ${LOCAL_PATH:-./local-dev}
      dockerfile: docker/apache/Dockerfile
    networks:
      - main
    environment:
      - VIRTUAL_HOST=local-dev.localhost
      - COMPOSER_MEMORY_LIMIT=-1
      - COMPOSER_AUTH=${COMPOSER_AUTH}
      - COMPOSER_ALLOW_SUPERUSER=1
      - PHP_IDE_CONFIG=serverName=local-dev

在这一行中复制的文件之一:${LOCAL_PATH}/docker/apache/conf.d:/usr/local/etc/php/conf.d与 xdebug 相关的含义是启用和设置扩展的文件。

想知道是否有办法通过使用ARGENV变量来告诉 Docker 在启动容器时启用/禁用 xDebug?有没有人尝试过这样的事情?如果是这样,你能帮我一些想法吗?

标签: dockerdocker-composedockerfile

解决方案


您可以根据构建参数简单地移动/重命名 xdebug conf 文件……</p>

FROM php:7.2-apache
RUN apt-get update && apt-get install -y \
        zlib1g-dev \
        git \
        unzip \
    && rm -rf /var/lib/apt/lists/ \
    && docker-php-ext-install zip pdo_mysql bcmath \
    && a2enmod rewrite \
    && pecl install xdebug-2.9.0 redis \
    && docker-php-ext-enable xdebug redis \
    && mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" \
    && mv /var/www/html /var/www \
    && chown -R www-data:www-data /var/www/ \
    && ln -s /usr/local/bin/php /usr/bin/php
COPY --from=composer:1.9 /usr/bin/composer /usr/bin/composer

RUN if [[ "$DISABLE_XDEBUG" == "1" ]] ; then mv "$PHP_INI_DIR/conf.d/xdebug.ini" "$PHP_INI_DIR/conf.d/xdebug.ini.disabled"

WORKDIR /var/www/drm-case
CMD ["docker/apache/bootstrap.sh"]

… 或类似的东西?


推荐阅读