Dockerで構築したPHP動作環境でLaravelフレームワーク動作させる。
(1)コンテナのシチュエーション
version: '2'
services:
app:
build: "./docker-file"
ports:
- "11180:80"
volumes:
- "./source-file:/var/www/html"
links:
- "mysql:mysql"
- "postgres:postgres"
postgres:
image: postgres:9.4
environment:
POSTGRES_USER: my_application
POSTGRES_PASSWORD: my_application
restart: always
ports:
- "5432:5432"
volumes:
- "postgres_db:/var/lib/postgresql/data"
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
mysql:
image: mysql:5.7.22
volumes:
- "./mysql-data:/var/lib/mysql"
- "./mysql-cnf:/etc/mysql/conf.d"
ports:
- "3306:3306"
environment:
# アプリケーションから利用するユーザー
- MYSQL_DATABASE=my_application
- MYSQL_USER=my_application
- MYSQL_PASSWORD=my_application
# root パスワード
- MYSQL_ROOT_PASSWORD=root_password
volumes:
postgres_db:
external: true
この環境で
ホスト側の ./source-file/ というマウントされたディレクトリに
Laravelアプリケーションをインストール
(2)Laravelの .env ファイルにDB接続設定を入力する
*** 当初何も考えずにDB接続環境を以下の用に設定した ***
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_application
DB_USERNAME=my_application
DB_PASSWORD=my_application
ところが、上記状態で実行させると
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from `members`)
上記の用にDB側から拒絶したというエラーが返却される。
結論としては
# 以下のように実行中のコンテナ名を記述
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_application
DB_USERNAME=my_application
DB_PASSWORD=my_application
(3)Laravel php artisan tinker だと動く?
1時間ほど上記の、箇所でハマってしまって備忘録のために残します。
この、コンテナから他コンテナへの接続に関しては
どこかの記事で、docker-compose.yaml上で指定された
コンテナ名で接続できる云々が記載された記事をどこかで見かけましたが、残念がら失念してしまっていてうっかりこのようなミスではまってしいました。
ところが
Laravelのコマンド
php artisan tinker
このインタラクティブシェル上で
>>> App\SomeModel::all();
と実行するとなぜか host = 127.0.0.1 の指定でも動作していました。
※どなたか、当該事象についておわかりの方はご教授くださいますと幸いです。