記事内に広告が含まれています。
おつかれさまです。すぺきよです。
最近仕事で古いCakePHP(1系!)で実装されたものを、現状最新のCakePHP5.3に書き換える仕事をしています。
同じ名前のフレームワークで、基本構造は同じなのですが、ファイルの置く位置やDB設定の保存場所、ファイル名の規則などなどものすごい変化です。
私もPHPはそれなりに自信はあるのですが、CakePHP5は使ったことがありません。
まずはチュートリアルということで、DockerComposeでPHPとMySQLのコンテナを起動して個人端末で勉強をしています。
進めていて困ったのがbakeコマンドを使うところ。
言われた通りに実行しても以下のエラーが出ます。
error: [Cake\Database\Exception\MissingConnectionException] Connection to Mysql could not be established: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for db failed: nodename nor servname provided, or not known in /Users/***/src/CakePHP/cms/vendor/cakephp/cakephp/src/Database/Driver.php on line 203
エラーメッセージからするとDBサーバーへの接続の確立に失敗している模様。
なぜだろうとおもったら、WebサーバーとDBサーバーはDockerComposeで起動しているのでローカルPCからの接続設定が違うことに気がつきました。
結論
DockerComposeでWebサーバーとDBサーバーを起動している時は、Webサーバー上のコンソールでbakeコマンドを実行する!
DockerDeskktopを使用されているなら、このメニューから起動するコンソール上でbakeコマンドを実行です。

多分webrootにつながると思うので、すぐそこでbakeコマンドを実行すればOKです。
私が使っているDocker周りのファイル
参考にDockerComposeとDockerファイルも置いておきます。
docker-compose.yml
version: "3.8"
services:
web:
build: ./Docker
container_name: php85-web
ports:
- "8080:80"
volumes:
- .:/var/www/html
depends_on:
- db
db:
image: mariadb:10.11
container_name: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: cms
MYSQL_USER: cmsuser
MYSQL_PASSWORD: cmspass
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
volumes:
db_data:
DockerFile
FROM php:8.5-apache
# intl に必要なライブラリ
RUN apt-get update \
&& apt-get install -y libicu-dev \
&& docker-php-ext-install intl pdo_mysql mysqli \
&& rm -rf /var/lib/apt/lists/*
RUN a2enmod rewrite
ENV APACHE_DOCUMENT_ROOT=/var/www/html/webroot
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' \
/etc/apache2/sites-available/*.conf \
/etc/apache2/apache2.conf \
/etc/apache2/conf-available/*.conf
WORKDIR /var/www/html

コメント