[英]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.