実現したいこと
- php artisanコマンドの処理が進まないのを解決したい
前提
フロントをnextjs、バックエンドをlaravelのapiでdockerを用いて開発しています。
発生している問題・エラーメッセージ
現状はvscodeのdev container拡張機能でdockerコンテナにアタッチして開発をしていたところ、php artisan listコマンドなどを実行時に処理が進まず、postmanでのリクエスト及びフロントエンドからのリクエストの処理も処理が進まなくなってしまいました。
ですがこの状態からvscodeでxdebugを使ったデバッグ状態でphp artisanコマンドを実行すると正常に実行されます。postmanリクエスト及びフロントエンドからのリクエストも正常に処理されます。
補足)
上記の不具合はdev containerでアタッチしたvscode上で発生しており、仮にdev containerでアタッチせずにローカルのvscodeのターミナルでdocker execコマンドでコンテナ内に入りphp artisanコマンドを実行するとうまく処理されpostman及びフロントからのリクエストも処理されます。
- コンテナアタッチ先のvscodeのターミナルの状態
root@〜〜〜:/var/www/html/strii-backend# php artisan list Cannot load Xdebug - it was already loaded
artisanコマンド一覧表示を期待しますが、この状態で処理が進まなくなってしまいます
該当のソースコード
バックエンドに関するDockerfile
docker
1FROM php:8.2-apache 2 3RUN apt-get update \ 4 && apt-get -y install git libicu-dev libonig-dev libzip-dev unzip locales vim zlib1g-dev libpng-dev libjpeg-dev libfreetype6-dev libwebp-dev \ 5 && apt-get clean \ 6 && rm -rf /var/lib/apt/lists/* \ 7 && locale-gen en_US.UTF-8 \ 8 && localedef -f UTF-8 -i en_US en_US.UTF-8 \ 9 && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ 10 && docker-php-ext-install intl pdo_mysql zip bcmath gd exif \ 11 && pecl install xdebug \ 12 && docker-php-ext-enable xdebug \ 13 && a2enmod rewrite 14 15ENV \ 16 # TZ=UTC \ 17 # TZ=Asia/Tokyo \ 18 # locale日本語設定 19 # LANG=ja_JP.UTF-8 \ 20 # LANGUAGE=ja_JP:ja 21 # LC_ALL=ja_JP.UTF-8 22 LANG=en_US.UTF-8 \ 23 LANGUAGE=en_US:en \ 24 LC_ALL=en_US.UTF-8 25 26COPY --from=composer:2.5 /usr/bin/composer /usr/bin/composer 27 28# 各種設定ファイルをコンテナの設定ファイルにコピー 29COPY php.ini /usr/local/etc/php/ 30COPY apache/000-default.conf /etc/apache2/sites-enabled/000-default.conf 31 32WORKDIR /var/www/html 33
php.ini
php
1〜〜〜 2 3[xdebug] 4xdebug.mode=debug 5xdebug.start_with_request = yes 6xdebug.client_host=host.docker.internal 7xdebug.client_port=9003 8xdebug.discover_client_host = 1
docker-compose.yml
docker
1version: '3.8' 2 3services: 4 web_backend: 5 build: ./docker/php 6 container_name: web_backend 7 tty: true 8 stdin_open: true 9 ports: 10 - 80:80 11 volumes: 12 - ./:/var/www/html/strii-backend 13 - ./docker/php/php.ini:/usr/local/etc/php/php.ini 14 - ./docker/php/apache/000-default.conf:/etc/apache2/sites-enabled/000-default.conf 15 depends_on: 16 - db 17 db: 18 image: mysql:8.2 19 container_name: db 20 environment: 21 MYSQL_ROOT_PASSWORD: 〜〜〜 22 MYSQL_DATABASE: 〜〜〜 23 MYSQL_USER: 〜〜〜 24 MYSQL_PASSWORD: 〜〜〜 25 TZ: 'Asia/Tokyo' 26 volumes: 27 - ./docker/db/data:/var/lib/mysql 28 - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf 29 - ./docker/csv:/var/lib/mysql-files/csv 30 ports: 31 - 3306:3306 32
試したこと
-
上記に記載したphp.iniのxdebugに関する設定をコメントアウトしてdev containerにアタッチするとphp artisanコマンドの処理及びpostman、フロントエンドからの処理が正常に実行される。
-
xdebugの設定を一行ずつコメントアウトしてコンテナにアタッチし確認してみると『xdebug.start_with_request = yes』の部分のみコメントアウトの状態でphp artisanコマンドと他の処理が正常に完了するのを確認でき、これを記載した時に質問の様にphp artisanコマンドとその他処理が進まなくなってしまう。
-
xdebugの設定をコメントアウトすると解決しますが今度はxdebugでのデバッギング時にブレイクポイントで処理が止まらずデバッギングできなくなってしまうという、どちらかを解決するともう一方で不具合となってしまう状態です。
-
vscodeのdev containerでアタッチせずにローカルのvscodeのターミナルでdocker execコマンドでphp artisanコマンドが動作しているので、vscodeのdev container拡張機能に問題があるか、上記のxdebugの何らかが原因であると考えていますが解決法がわかりません。
この不具合が出るまでは普通に動作し開発ができていたのですが、今日急にこの様な問題が発生しました。問題発生前の他のエラーの解決過程でvscodeの更新をしてしまったのも原因かもしれません。
また下記画像の様にdev containerにアタッチしたvscodeでportsがAutoForwardedで増えてしまっています。
解決法がわかる方いましたらよろしくお願いします。
追加でコードが必要な場合は指摘していただければ幸いです。
追記
本問題発生前の状態のgithubリモートリポジトリをgit cloneして同様にdev containerでアタッチしても同じ問題が発生しています。
補足情報(FW/ツールのバージョンなど)
mac book pro 13inch(2020 intel)
macOS Monterey
vscode 1.87.2
Dev Containers v0.348.0
docker desktop 4.18.0
Docker 20.10.24
php 8.2
laravel 9系
composer 2.5
next.js 14.0.3
react 18.2.0
回答1件
あなたの回答
tips
プレビュー