1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerで構築したPHP動作環境でLaravel実行の際のDB接続情報について

Last updated at Posted at 2018-10-12

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 の指定でも動作していました。
※どなたか、当該事象についておわかりの方はご教授くださいますと幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?