docker - 通过 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 相关的含义是启用和设置扩展的文件。
想知道是否有办法通过使用ARG
或ENV
变量来告诉 Docker 在启动容器时启用/禁用 xDebug?有没有人尝试过这样的事情?如果是这样,你能帮我一些想法吗?
解决方案
您可以根据构建参数简单地移动/重命名 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"]
… 或类似的东西?
推荐阅读
- sql - GitLab 管道错误:包 'mysql-client' 没有安装候选。我能做些什么?
- excel - 使用 vba 打开/保存 excel 文件时隐藏标准进度条
- firebase-authentication - 如果用户仍然存在于具有 OpenID Connect 的身份提供者上,身份工具包是否会重新验证
- dataset - 如何从 Foundry 中的代码存储库编写或创建外部数据集
- reactjs - 如何在 AWS CodeBuild 中为 MERN 堆栈应用程序配置 buildspec.yml
- javascript - writeQuery 中的 Apollo @connection 指令不清除分页列表
- javascript - 如何将异步输出提供给表达渲染器?
- javascript - 我在我的轮子类中对 center 方法进行了转换,并尝试向它添加 easeInOut 函数,以便在它离中心更远时更快
- python - 如何将输出字符串转换为 Json 并检查 python 中的字段项?
- c++ - 在 C++ 中读取文件时并非所有字节都显示