前提・実現したいこと
Docker-composeでnginx/php/mysqlのlocal環境を作成しました。
phpからdbにPDO接続してsplクエリの結果を表示させたいのですが、何故か接続が拒否されてしまいます。
発生している問題・エラーメッセージ
以下のエラーが表示されてしまい、行き詰まっています。
主に設定値を変更して二日ほど悪戦苦闘していますが、エラーが解消されません。(エラーの内容が変わることはありますが)
何か、設定漏れや間違いがあるのでしょうか?
ご教授頂けますと幸いです。
SQLSTATE[HY000] [2002] Connection refused
※http://127.0.0.1:8080/にアクセスして、phpinfo()などを記載したphpファイルが正常に処理されて表示される所まで確認できています。
※docker-compose後にdocker execしてmysqlのコンテナに入ってshow tablesしたりはできています。
該当のソースコード
以下のようなディレクトリ/ファイル構造になっています。
mysql----data----m_user.sql | ---Dockerfile | ---my.conf nginx----default.conf | ---Dockerfile php----php.ini | |---Dockerfile web----index.php docker-compoes.yml
docker-compose.ymlの内容は以下の通りです。
version: '2' services: nginx: container_name: nginx build: context: "./nginx" dockerfile: "Dockerfile" ports: - "8080:80" volumes: - ./web:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf links: - php php: container_name: php build: context: "./php" dockerfile: "Dockerfile" volumes: - ./web:/var/www/html - ./php/php.ini:/usr/local/etc/php/php.ini links: - mysql mysql: container_name: mysql build: context: "./mysql" dockerfile: "Dockerfile" ports: - 3306:3306 environment: MYSQL_HOST: localhost MYSQL_DATABASE: mysql_db MYSQL_USER: mysql_user MYSQL_PASSWORD: mysql_pass MYSQL_ROOT_PASSWORD: root volumes: - ./mysql/my.conf:/etc/mysql/conf.d/my.conf - ./mysql/data:/docker-entrypoint-initdb.d
php/index.phpの内容は以下の通りです。
<?php try { $char = "utf8"; $host = 'mysql'; $db = 'mysql_db'; $user = 'mysql_user'; $pass = 'mysql_pass'; $dsn = 'mysql:host=' . $host . ';dbname=' . $db . ';charset=' . $char; $dbh = new PDO($dsn, $user, $pass); } catch (PDOException $e) { // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了 header('Content-Type: text/plain; charset=UTF-8', true, 500); exit($e->getMessage()); } // Webブラウザにこれから表示するものがUTF-8で書かれたHTMLであることを伝える // (これか <meta charset="utf-8"> の最低限どちらか1つがあればいい. 両方あっても良い.) header('Content-Type: text/html; charset=utf-8'); ?>
php/Dockerfileの内容は以下の通りです。
FROM php:fpm-alpine RUN docker-php-ext-install pdo_mysql
mysql/Dockerfileの内容は以下の通りです。
FROM mysql:latest
※関係しそうなファイルの内容のみ上げました。
試したこと
●パスワードやユーザ名などのDB接続情報の誤りがないかチェック
●DBのhostを「localhost」に変更
●DBのhostを「127.0.0.1」に変更
●DBのhostをコンテナのIPに変更
●DBのhostをDockerのサービス名に変更
●DBのhostをDockerのコンテナ名に変更
回答2件
あなたの回答
tips
プレビュー