Как включить xdebug в док-контейнере php:7.4-fpm-alpine?

Моя цель — использовать этот репозиторий git для Laravel с xdebug для php-fpm: https://github.com/aschmelyun/docker-compose-laravel

При использовании этого репозитория я запускаю:

  1. docker-compose up -d --build site
  2. докер-компоновать

Вот файл докера из репозитория выше:

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

Я пробовал другие вещи, которые я нашел в Google. Однако не смог заставить его работать (так как я действительно не понимаю, что делаю). Я думаю, что вышеизложенное казалось мне закрытым, но, возможно, я совершенно не прав.

Я запускаю его на Windows 10, нужна дополнительная информация?


person olle.holm    schedule 20.09.2020    source источник
comment
Какую роль npm играет в вашем PHP-проекте?   -  person Daniel W.    schedule 21.09.2020
comment
@DanielW: я нашел эту настройку на YouTube (а также в его репозитории), я подумал, что она очень хороша и проста в использовании в качестве основы. Однако мне не хватало xdebug, поэтому я попытался добавить его сам. Однако npm также был включен и может быть полезен позже, но сейчас я им не пользуюсь. Я попытался удалить его, но все равно не повезло. Вот видео: youtube.com/watch?v=I980aPL-NRM   -  person olle.holm    schedule 21.09.2020


Ответы (2)


Я нашел эти инструкции здесь о том, как его установить вверх. Добавьте его в конец файла php.docker:

# 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

РЕДАКТИРОВАТЬ: вы также должны удалить порт xdebug в docker-compose.yml (если вы его добавили)

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"
            },
        }
    ]
}
person banankontakt    schedule 20.09.2020
comment
До сих пор не работает. Все запускается, но я не могу подключиться к порту. Я пробовал: ``` › 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) ``` Однако я вижу, что xdebug настроен при использовании ‹? phpинформация(); ?›. Что случилось? - person olle.holm; 20.09.2020
comment
Какую программу вы используете для подключения phpstorm? Какая у вас ошибка? - person banankontakt; 21.09.2020
comment
Я использую визуальный код. Вот такая ошибка у меня:Error: listen EADDRINUSE: address already in use :::9001 - person olle.holm; 21.09.2020
comment
Хорошо, попробуйте удалить порт xdebug (9001) в compose.dockerfile. Это должно решить проблему. - person banankontakt; 21.09.2020

person    schedule
comment
Хотя этот фрагмент кода может быть решением, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. - person Neo Anderson; 21.09.2020
comment
Спасибо за ваш комментарий @NeoAnderson. Я действительно не могу придумать объяснение простой команды установки. Не стесняйтесь обновлять. - person Tania Petsouka; 21.09.2020
comment
Спасибо, но он жаловался на неправильную версию. Какой порт я должен использовать в этом примере? - person olle.holm; 21.09.2020
comment
Спасибо за ответ Таня. Хотя причина вашего ответа может быть очевидна для вас, она может озадачить других. Возможно, именно поэтому кто-то отметил и проголосовал против, что, кстати, НЕ является веской причиной для того, чтобы отметить ответ. Ответы, содержащие только фрагменты кода, приемлемы, но краткое объяснение может только улучшить качество ответа. В этом случае не очень очевидно, почему использование xdebug-2.7.0 вместо 2.9.2, как это предлагается в ответе banankontakt, может улучшить ситуацию. - person Neo Anderson; 21.09.2020