【CakePHP + Docker】bakeでConnection to Mysql could not be establishedと言われた時

CakePHP

記事内に広告が含まれています。

おつかれさまです。すぺきよです。

最近仕事で古い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コマンドを実行です。

Docker Desktopの画面

多分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

コメント

タイトルとURLをコピーしました