簡體   English   中英

PHP / 如何在遠程 Docker 容器上使用遠程調試器

[英]PHP / How to use remote debugger on remote Docker container

我正在做一個項目,文件存儲在遠程服務器上,這個項目在 Docker 上運行。

我正在嘗試在 PhpStorm 中啟用 Xdebug,但無法正常工作。 第一個問題是我無法訪問遠程 PHP Docker 容器中的 PHP 可執行文件。

澄清一下:我的 PhpStorm IDE 在我的語言環境機器上,而我的 docker 項目在遠程服務器上。

在此處輸入圖像描述

在我的遠程容器 docker php 路徑中:

在此處輸入圖像描述

當我嘗試驗證時,它無法正常工作:

在此處輸入圖像描述

; XDEBUG Extension

[xdebug]
xdebug.remote_enable = 1
xdebug.profiler_enable = 0
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 0
xdebug.profiler_enable_trigger = 0
xdebug.show_local_vars = 0
xdebug.remote_port = 9003
xdebug.remote_host = host.docker.internal
xdebug.idekey = PHPSTORM
;xdebug.remote_log = "/var/www/web/var/log/xdebug.log"
xdebug.cli_color = 1
xdebug.extended_info = 1

無論如何讓 Xdebug 在此配置中工作?

Dockercompose

version: '3.0'

services:
  apache:
    container_name: colis_apache
    build:
      context: apache
      args:
        USER_UID: 1000
    volumes:
      - "../..:/var/www/colis:rw,cached"
      - "./logs:/var/log/apache2/:rw"
    depends_on:
      - db
    ports:
      - "80:80"
      - "443:443"
    hostname: "colis.qangles.lan"
    networks:
      - colis-net
    extra_hosts:
      - "host.docker.internal:host-gateway"
  db:
    image: mariadb:10.1.45
    container_name: colis_db
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: *****
      MYSQL_USER: colis
      MYSQL_PASSWORD: ****
    volumes:
      - "db_colis_data:/var/lib/mysql"
      - "../..:/code:rw"
    networks:
      - colis-net
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: colis_phpmyadmin
    links:
      - db
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: toor
    ports:
      - "8080:80"
    networks:
      - colis-net

volumes:
  db_colis_data:

networks:
  colis-net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.12.2.0/24

文件

    FROM php:7.3.20-fpm    
    RUN apt-get update && apt-get install -y \
        libicu-dev \
        zip \
        curl \
        libcurl4-openssl-dev \
        libmcrypt-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
        zlib1g-dev \
        libxml2-dev \
        libxslt-dev \
        libicu-dev \
        wget \
        curl \
        zip \
        git \
        jpegoptim optipng \
        cron
    
    # opcache
    RUN docker-php-ext-enable opcache
    
    # Xdebug
    RUN pecl install xdebug-3 apcu
    RUN docker-php-ext-enable xdebug apcu
    
    # PHP extensions
    RUN docker-php-ext-install intl pdo_mysql mysqli calendar soap \
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
        && docker-php-ext-install gd \
            exif \
            gettext \
            bcmath \
            shmop \
            sockets \
            sysvmsg \
            sysvsem \
            sysvshm \
            xsl
    
    # Composer
    RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    RUN mkdir -p /var/www/.composer
    
    COPY php.ini /usr/local/etc/php/
    COPY xdebug.ini /usr/local/etc/php/conf.d/
    COPY openssl.cnf /usr/lib/ssl/
    
    RUN mkdir -p /var/www/colis/var/log
    RUN chown -R www-data:www-data /var/www
    
    # Set timezone to UTC (as always)
    RUN rm /etc/localtime \
        && ln -s /usr/share/zoneinfo/UTC /etc/localtime \
        && date \
        && printf "date.timezone=Europe/Paris\n" > $PHP_INI_DIR/conf.d/timezone.ini
    
    #COPY files/crontab /etc/cron.d/distriartisan
    # Change CMD to have cron running
    RUN echo "#!/bin/sh\ncron\nphp-fpm" > /usr/bin/run
    RUN chmod u+x /usr/bin/run
    CMD ["run"]
    
    # Use www-data with correct UID
    ARG USER_UID=1000
    RUN usermod -u $USER_UID www-data
    
    # Mailcatcher
    #RUN echo "sendmail_path = /usr/sbin/ssmtp -t" > /usr/local/etc/php/conf.d/sendmail.ini \
    #    && echo "mailhub=mail:25\nUseTLS=NO\nFromLineOverride=YES" > /etc/ssmtp/ssmtp.conf
    
    WORKDIR /var/www/colis

你可以使用 sail 示例來查看更好的 docker-compose.yml

你的 Dockerfile 應該有這個部分

   RUN apt-get install -y php8.1-cli php8.1-dev \
       php8.1-pgsql php8.1-sqlite3 php8.1-gd \
       php8.1-curl \
       php8.1-imap php8.1-mysql php8.1-mbstring \
       php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \
       php8.1-intl php8.1-readline \
       php8.1-ldap \
       php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \
       php8.1-memcached php8.1-pcov php8.1-xdebug \
version: '3'
services:
    laravel.test:
        build:
            context: .
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
                XDEBUG: ${SAIL_DEBUG}
        image: sail-8.1/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
            PHP_IDE_CONFIG: '${PHP_IDE_CONFIG}'
        volumes:
            - '.:/var/www/html'
        networks:
            - sail

然后在 .env 文件中設置這些變量:

SAIL_XDEBUG_MODE=develop,debug

php.ini 文件:

[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS

[XDebug]
zend_extension = xdebug.so
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = true
xdebug.idekey = VSC
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003

然后在 phpStorm 設置中創建一個服務器。 使用 0.0.0.0 ip 和 9003 端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM