開発環境
・PHP v8系
・Docker v 25.0.2
・Dev Containers v0.354.0
・VSCode Version: 1.88.1
Dev ContainerでDockerのコンテナにremote接続し、コードのエラーを確認する作業の中で
あるphpファイルの変数$cartをDEBUG CONSOLEに入力しても
Cannot evaluate code without a connection
「接続されていないからコードを評価できない」と出る。
iniファイルが機能していないぽい。
DockerfileでxdebugのiniファイルをCOPYするよう指示を書いたので確認。
COPY ./docker/app/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini.
だが、コンテナ内のディレクトリ調べたらconf.dの中にxdebug.iniが入ってない。
(php.iniも)
Dockerfileが読み込まれていないのが原因。
テーブル消えるのは心許ないがDockerfileを更新するべく
$docker-compose up --build
(コンテナを作り直し)
すると
=> ERROR [app stage-0 3/7] RUN apt update && apt install -y apache2 && docker-php-ext-install mysqli mbstring zip && pecl inst
configure: error: Package requirements (oniguruma) were not met:
onigurumaの件、インストールすべきパッケージがmbstringではなく libonig-devらしい
https://qiita.com/June8715/items/1df5958b95c1ff2d4c1b
ライブラリはmbstringではなくlibonigが必要とのこと。
※
libonig:マルチバイト文字を含む文字列を処理するライブラリ。php7.4.0以前はmbstringだったが、以降はlibonigがスタンダードになった模様。https://github.com/docker-library/php/issues/880
なのでDockerfileを書き換え
RUN apt-get update \
&& apt-get install -y apache2 \
&& docker-php-ext-install mysqli mbstring zip\
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
を
RUN apt-get update \
&& apt-get install -y apache2 libonig-dev\
&& docker-php-ext-install mysqli zip\
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
そしてふたたびコンテナをリビルドかけると
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:
と。
libzip-devが必要とのことで
追記して再度実行。
※
libzip:zip処理のライブラリ。
✔ Container msr-db-1 Recreated 0.1s
✔ Container msr-app-1 Recreated
リビルド完了。
リモート接続して
iniファイルの所在を確認すると
:/usr/local/etc/php# ls -a
. .. conf.d php.ini php.ini-development php.ini-production
:/usr/local/etc/php/conf.d# ls -a
. .. docker-php-ext-mysqli.ini docker-php-ext-sodium.ini docker-php-ext-xdebug.ini docker-php-ext-zip.ini xdebug.ini
コンテナ内にiniファイルが無事にCOPYされていた。
xdebugの動作も確認完了。