【问题标题】:How to enable xdebug in php:7.4-fpm-alpine docker container?如何在 php:7.4-fpm-alpine docker 容器中启用 xdebug?
【发布时间】:2020-09-20 17:53:02
【问题描述】:

我的目标是将此 git repo 用于 Laravel 和 xdebug 用于 php-fpm: https://github.com/aschmelyun/docker-compose-laravel

当使用这个 repo 时,我运行:

  1. docker-compose up -d --build 站点
  2. 码头工人组成

这是来自上述 repo 的 docker 文件:

FROM php:7.4-fpm-alpine

ADD ./php/www.conf /usr/local/etc/php-fpm.d/www.conf
RUN addgroup -g 1000 laravel && adduser -G laravel -g laravel -s /bin/sh -D laravel
RUN mkdir -p /var/www/html
RUN chown laravel:laravel /var/www/html
WORKDIR /var/www/html
RUN docker-php-ext-install pdo pdo_mysql

我也在这里添加了端口(compose.dockerfile):

php:
    build:
      context: .
      dockerfile: php.dockerfile
    container_name: php
    volumes:
      - ./src:/var/www/html:delegated
    ports:
      - "9000:9000"
     # Added next line:
      - "9001:9001"                     
    networks:
      - laravel

我已尝试将此添加到 php.dockerfile 的末尾:

# Install essential build tools
RUN apk add --no-cache \
    git \
    yarn \
    autoconf \
    g++ \
    make \
    openssl-dev

# Install xdebug
RUN docker-php-source extract \
    && pecl install xdebug \
    && echo "xdebug.remote_enable=on\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_autostart=on\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_port=9001\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_handler=dbgp\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_connect_back=1\n" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && docker-php-ext-enable xdebug \
    && docker-php-source delete \
    && rm -rf /tmp/*

这是我在添加上述行时遇到的错误(看起来不相关,但我猜它破坏了一些依赖关系):

mysql       | Version: '5.7.29'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
composer    | list [--xml] [--raw] [--format FORMAT] [--] [<namespace>]
composer    |
npm exited with code 1
composer exited with code

我已经尝试过在谷歌上找到的其他东西。但是无法让它工作(因为我真的不明白我在做什么)。我认为上面的感觉就像是我得到的关闭,但也许我完全错了。

我在 Windows 10 上运行它,需要更多信息吗?

【问题讨论】:

  • npm 在您的 PHP 项目中扮演什么角色?
  • @DanielW:我在 youtube(以及他的 repo)上找到了这个设置,我认为它非常好并且易​​于用作基础。但是我错过了 xdebug 所以试图自己添加它。但是 npm 也包括在内,以后可能会有用,但目前我不使用它。我试图删除它,但仍然没有运气。这是视频:youtube.com/watch?v=I980aPL-NRM

标签: php laravel docker xdebug fpm


【解决方案1】:
RUN apk add --no-cache $PHPIZE_DEPS \
    && pecl install xdebug-2.9.2 \
    && docker-php-ext-enable xdebug  \

【讨论】:

  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
  • 感谢您的评论@NeoAnderson。我真的无法想出一个简单的安装命令的解释。随时更新。
  • 谢谢,但它抱怨版本错误。在这个例子中我应该使用什么端口?
  • 感谢您的回答塔尼亚。虽然你的答案背后的原因对你自己来说可能很明显,但它可能会让其他人感到困惑。也许这就是为什么有人标记和投反对票的原因,顺便说一句,这不是标记答案的好理由。 Code-sn-ps-only 的答案是可以的,但是抛开简单的解释只能提高答案的质量。在这种情况下,为什么使用 xdebug-2.7.0 而不是 2.9.2(如 banankontakt 的回答中所建议的那样)会有所改善,这并不是很明显。
【解决方案2】:

我找到了有关如何设置的说明here。将其添加到 php.dockerfile 的末尾:

# Install base packages
RUN apk update
RUN apk upgrade

# xdebug with VSCODE
ENV XDEBUG_VERSION=2.9.2
RUN apk --no-cache add --virtual .build-deps \
        g++ \
        autoconf \
        make && \
    pecl install xdebug-${XDEBUG_VERSION} && \
    docker-php-ext-enable xdebug && \
    apk del .build-deps && \
    rm -r /tmp/pear/* && \
    echo -e "xdebug.remote_enable=1\n\
        xdebug.remote_autostart=1\n\
        xdebug.remote_connect_back=0\n\
        xdebug.remote_port=9001\n\
        xdebug.idekey=\"VSCODE\"\n\
        xdebug.remote_log=/var/www/html/xdebug.log\n\
        xdebug.remote_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini


# Change TimeZone
RUN apk add --update tzdata
ENV TZ=Europe/Bucharest

编辑: 您还应该删除 docker-compose.yml 中的 xdebug 端口(如果您添加了它)

For **Visual Studio Code** Here is the kaunch.json I used:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9001,
            "pathMappings": {
                "/var/www/html/public": "${workspaceFolder}/src/public"
            },
        }
    ]
}

【讨论】:

  • 还是不行。一切都开始了,但我无法连接到端口。我试过:``` > docker exec -it php sh /var/www/html # netstat -tulpn | grep LISTEN tcp 0 0 127.0.0.11:45201 0.0.0.0:* LISTEN - tcp 0 0 :::9000 :::* LISTEN 1/php-fpm.conf) ``` 但是我可以看到使用 php phpinfo(); ?>。怎么了?
  • 你用什么程序连接phpstorm?你得到什么错误?
  • 我使用可视化代码。这是我得到的错误:Error: listen EADDRINUSE: address already in use :::9001
  • 好的,尝试删除compose.dockerfile中的xdebug端口(9001)。这应该可以解决问题。
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2019-05-26
  • 2018-03-31
  • 2020-11-05
  • 2016-10-14
  • 1970-01-01
相关资源
最近更新 更多