Отладка Laravel с помощью VSCode в контейнере Docker с использованием Xdebug в качестве отладчика - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь отладить код Laravel в коде Visual Studio с помощью Xdebug. Я использую контейнер Docker, который работает как сервер.

Но я получаю эту ошибку при попытке отладки:

Невозможно подключиться к процессу времени выполнения, тайм-аут после 10000 мс - (причина: невозможно подключиться к цели: connect ECONNREFUSED 192.168.99.100:9000).

Вот мой VSCode launch.json

    "version": "0.2.0",
    "configurations": [

        {
            "type": "node",
            "request": "attach",
            "name": "Docker: Attach to Node",
            "port": 9000,
            "address": "192.168.99.100",
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/var/www",
            "protocol": "inspector",
            "restart": true
        }
]

Вот docker-compose.yml

  app:
    build:
      context: ./
      dockerfile: .docker/app.dockerfile
      args:
      - INSTALL_XDEBUG=true
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "DB_PORT=33061"
      - "DB_HOST=192.168.99.100"
      - XDEBUG_CONFIG=remote_host=192.168.99.100 remote_port=9000 remote_connect_back=0

Вот мой app.dockerfile

FROM php:7.1-fpm

RUN docker-php-ext-install pdo &&  docker-php-ext-install pdo_mysql

#####################################
# xDebug:
#####################################

ARG INSTALL_XDEBUG=true
RUN if [ ${INSTALL_XDEBUG} = true ]; then \
    # Install the xdebug extension
    pecl install xdebug && \
    docker-php-ext-enable xdebug \
;fi

# Copy xdebug configration for remote debugging
COPY .docker/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini


#####################################
# ZipArchive:
#####################################

ARG INSTALL_ZIP_ARCHIVE=false
RUN if [ ${INSTALL_ZIP_ARCHIVE} = true ]; then \
    # Install the zip extension
    docker-php-ext-install zip \
;fi

# RUN apt-get update && apt-get install -y \
#         freetds-bin \
#         freetds-dev \
#         freetds-common \
#         libct4 \
#     && docker-php-ext-install pdo_dblib

# pdo_dblib
RUN apt-get update && apt-get install -y freetds-dev
RUN docker-php-ext-configure pdo_dblib --with-libdir=/lib/x86_64-linux-gnu
RUN docker-php-ext-install pdo_dblib
RUN sed -i "s|\[sqlsrv\]|\[sqlsrv\]\nhost = 172.18.250.57\nport =1435\nclient charset=UTF-8\ntds version = 8.0|g" /etc/freetds/freetds.conf




RUN usermod -u 1000 www-data

WORKDIR /var/www

CMD ["php-fpm"]

EXPOSE 9000
EXPOSE 9001

Я думаю, что VSCode не может подключиться к удаленному Xdebug с портом 9000. Но при проверке в приложении Docker image Xdebug работает правильно. Может быть, VSCode нужна дополнительная настройка. Но я не смог решить эту проблему.

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете использовать PHP Debug VS Расширение кода для соединения с XDebug. PHP-FPM по умолчанию работают на порту 9000, поэтому лучше изменить настройки xdebug.remote_port на другой порт (например, 9001):

// launch.json

"version": "0.2.0",
"configurations": [
  {
    "name": "Listen for XDebug",
    "type": "php",
    "request": "launch",
    "port": 9001
  },
  {
    "name": "Launch currently open script",
    "type": "php",
    "request": "launch",
    "program": "${file}",
    "cwd": "${fileDirname}",
    "port": 9001
  }
]

Если вы используете Docker, используйте эти настройки в файле php.ini:

//php.ini

[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = host.docker.internal
xdebug.remote_port = 9001

Начиная с версии 18.03 Docker, host.docker.internal указывает на IP-адрес хоста на Mac / Windows . Для Linux вы можете использовать этот обходной путь .

После того, как эти настройки установлены, можно начинать.

...