首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将VSCode连接到Docker容器内的xdebug 3?

如何将VSCode连接到Docker容器内的xdebug 3?
EN

Stack Overflow用户
提问于 2021-05-09 13:16:56
回答 2查看 3.4K关注 0票数 1

你好,程序员们!

我使用Win 10和wsl2。尝试用Docker构建现代开发环境。我正在使用nginx,php:fpm,mariadb,adminer。一切都很好,外行调试器。我只是不明白为什么。我甚至从我的本地机器上看到了!

代码语言:javascript
运行
复制
PS D:\Projects\php-docker\dev> tnc host.docker.internal -p 9003

ComputerName     : host.docker.internal
RemoteAddress    : 192.168.0.5
RemotePort       : 9003
InterfaceAlias   : Ethernet
SourceAddress    : 192.168.0.5
TcpTestSucceeded : True

并且ive加入了php容器,并看到了XDebuger的正确安装。

代码语言:javascript
运行
复制
kds@matrix:/mnt/d/Projects/php-docker/dev$ docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                       NAMES
8923a772e4d9   nginx            "/docker-entrypoint.…"   58 minutes ago   Up 34 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp           dev_web_1
2aa7df39190d   dev_php          "docker-php-entrypoi…"   58 minutes ago   Up 34 minutes   9000/tcp                                    dev_php_1
efa5a9175c3b   adminer:latest   "entrypoint.sh docke…"   21 hours ago     Up 34 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   dev_adminer_1
e6c6a046712e   mariadb          "docker-entrypoint.s…"   21 hours ago     Up 34 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   dev_mysql_1
kds@matrix:/mnt/d/Projects/php-docker/dev$ docker exec -it dev_php_1 bash
root@2aa7df39190d:/var/www/html# php -v
PHP 8.0.6 (cli) (built: May  7 2021 20:37:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.6, Copyright (c) Zend Technologies
    with Xdebug v3.0.4, Copyright (c) 2002-2021, by Derick Rethans

docker-compose.yml

代码语言:javascript
运行
复制
version: '3'
services:
    web:
        image: nginx
        restart: always
        ports:
            - "80:80"
        volumes:
            - ./nginx.conf:/etc/nginx/conf.d/nginx.conf
            - ./app:/www/app
    php:
        build:
            context: .
            dockerfile: PHP_Dockerfile
        volumes: 
            - ./app:/www/app
            - ./logs/xdebug:/logs/xdebug
        environment: 
            XDEBUG_CONFIG: "mode=debug
                            start_with_request=yes
                            client_host=host.docker.internal
                            client_port=9003"
    mysql:
        image: mariadb
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: 'secret'
            MYSQL_USER: 'db_user'
            MYSQL_PASSWORD: 'secret'
            MYSQL_DATABASE: 'test'
        volumes:
            - mysqldata:/var/lib/mysql
        ports:
            - 3306:3306
    adminer:
        image: adminer:latest
        restart: always
        environment:
            ADMINER_DESIGN: ng9
            ADMINER_DEFAULT_SERVER: mysql
        ports: 
            - 8080:8080
volumes:
    mysqldata: {}

PHP_Dockerfile

代码语言:javascript
运行
复制
FROM php:fpm

RUN docker-php-ext-install pdo pdo_mysql \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug

app\public\index.php

代码语言:javascript
运行
复制
<?php
    xdebug_info();

VS代码launch.json

代码语言:javascript
运行
复制
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "stopOnEntry": true,
            "log": true,
            "pathMappings": {
                "/www/app": "${workspaceFolder}/app"
            },
        },
    ]
}

.-.

问题解决了! 关于Github的有益指导

  1. 添加xdebug.ini
代码语言:javascript
运行
复制
[XDebug]
zend_extension=xdebug.so

xdebug.mode = debug
xdebug.start_with_request=yes

#Replace host.docker.internal to your computers IP address if linux
xdebug.client_host=host.docker.internal
  1. 新船坞-Compose.yml
代码语言:javascript
运行
复制
version: '3'
services:
    web:
        image: nginx
        restart: always
        ports:
            - "80:80"
        volumes:
            - ./nginx.conf:/etc/nginx/conf.d/nginx.conf
            - ./app:/www/app
    php:
        build:
            context: .
            dockerfile: PHP_Dockerfile
        volumes: 
            - ./app:/www/app
            - ./xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
        environment: 
            PHP_IDE_CONFIG: "serverName=docker-test"
    mysql:
        image: mariadb
        restart: always
        environment:
            MYSQL_ROOT_PASSWORD: 'secret'
            MYSQL_USER: 'db_user'
            MYSQL_PASSWORD: 'secret'
            MYSQL_DATABASE: 'test'
        volumes:
            - mysqldata:/var/lib/mysql
        ports:
            - 3306:3306
    adminer:
        image: adminer:latest
        restart: always
        environment:
            ADMINER_DESIGN: ng9
            ADMINER_DEFAULT_SERVER: mysql
        ports: 
            - 8080:8080
volumes:
    mysqldata: {}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-09 13:24:48

这一切看起来都很好,除了XDEBUG_CONFIG: "mode=debug start_with_request=yes" -您不能通过XDEBUG_CONFIG设置这些。

您可以使用XDEBUG_MODE=debug作为环境变量来设置模式,但只能在ini文件中设置xdebug.start_with_request值。

如果将xdebug_info()放在要调试的PHP脚本中,那么它的输出会显示什么?

票数 4
EN

Stack Overflow用户

发布于 2021-07-12 02:59:07

对于任何在升级到xdebug 3之后来到这里的人,请注意有一个重要的更改。在xdebug 3中重命名了此值:

xdebug 2:xdebug.remote_host

xdebug 3:xdebug.client_host

主机

因此,您需要在php.ini中重命名该值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67458157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档