質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

12566閲覧

dockerでmysqlに接続するにはどうすればいいか

taka96

総合スコア12

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

3クリップ

投稿2018/03/06 13:41

前提・実現したいこと

docker-composeを利用してphp、nginx、mysqlの環境を作りたい

ここに質問の内容を詳しく書いてください。
現状docker-composeを利用してnginxとPHPを利用できる環境を作成するところまではできています。
そこからmysqlに接続しようと調べましたがやり方がわからずに一週間くらい止まっています。
どなたか助けてください。

発生している問題・エラーメッセージ

docker-compose up -dでnginxとphpとmysqlが動いていることは確認できています。
イメージ説明
mysqlにexecで接続後テーブルを作成してphp側で接続をできるかテストしたところうまくいかないです。
設定を変えてみたりして以下のエラーが出てから進んでいないです。

1. SQLSTATE[HY000] [2002] Connection refused 2. MySQL server has gone away

該当のソースコード

docker-compose.yml

version: '2' services: sqlbox: container_name: sqlbox image: busybox volumes: - ./data/mysql:/var/lib/mysql/data networks: - dev-net wwwbox: container_name: wwwbox image: busybox volumes: - ./data/www:/var/www/html networks: - dev-net dev-nginx: container_name: dev-nginx build: ./nginx ports: - "80:80" links: - dev-php volumes: - ./nginx/server.conf:/etc/nginx/conf.d/server.conf volumes_from: - wwwbox networks: - dev-net dev-php: container_name: dev-php build: ./php7 links: - dev-mysql volumes: - ./php7/php.ini:/usr/local/etc/php/php.ini volumes_from: - wwwbox networks: - dev-net depends_on: - "dev-mysql" dev-mysql: container_name: dev-mysql image: mysql:5.6 volumes: - ./mysql:/etc/mysql/conf.d ports: - "5432:5432" volumes_from: - sqlbox networks: - dev-net environment: - "MYSQL_ROOT_USER=roottest" - "MYSQL_ROOT_PASSWORD=rootpass" - "MYSQL_ALLOW_EMPTY_PASSWORD=no" - "MYSQL_DATABASE=test" - "MYSQL_USER=test" - "MYSQL_PASSWORD=passpass" - "TZ=Asia/Tokyo" networks: dev-net: driver: bridge

index.php

<?php $hostname = "192.168.99.100"; $username = "test"; $password = "passpass"; $dbname = "test"; $char = "utf8"; $port = "5432"; try{ //DBを選択してコネクト $db_perm = array( PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); $link = new PDO('mysql:host='.$hostname.'; port='.$port.'; dbname='.$dbname.'; charset='.$char , $username, $password, $db_perm); //SELECT文を発行 $result = $link->query('select ID,Name from member_tb where Name = "Mako Ishino"'); //ヒット数を表示 $duplicate_num = $result->rowCount(); echo $duplicate_num ." 件該当しました。<br>\n"; //接続をクローズ $result = null; $link = null; } catch( PDOException $e) { $db_error = $e->getMessage(); error_log($db_error); print 'DBエラー: ' . $db_error .'<br>' ; die($db_error); }

試したこと

index.phpのhostやportの設定の変更等

補足情報(FW/ツールのバージョンなど)

centos 7
php 7.2
mysql 5.6
docker 18.01.0-ce
windows10 home

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

$hostname = "192.168.99.100";

回答にもありましたが、上記のように変更しても繋がらなかったので、「docker exec」コマンドでmysqlのコンテナに接続して/etc/hostsに書いてあるIPに変更すれば接続できました。

これが正しいやり方なのかは不明。

投稿2018/03/09 13:12

taka96

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

PHPのここ直しましょう。

PHP

1$hostname = "192.168.99.100";

まずはPHPのコンテナにdocker-composeを使って入り込んで見ましょう。
dockerのdependentやlinkはぶっちゃけ、/etc/hostsに書き込んで終わりです。
従って、/etc/hostsファイルさえ確認すれば何処に接続すべきかが分かります。

Bash

1$ docker-compose exec dev-php bash 2 3$ cat /etc/hosts

そうすれば、dev-phpというホストのIPアドレスが分かります。
これはdocker runでコンテナが作られた瞬間解決されることなので、
PHPの$hostname変数の値はdev-phpという文字列でよい事がわかります。

投稿2018/03/06 13:48

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taka96

2018/03/06 14:18 編集

回答ありがとうございます。 $hostname = "192.168.99.100"; 上記のPHPに変更してみましたが、下記のようなエラーが出てしまい、繋がらない状態になっています。 エラー内容:「SQLSTATE[HY000] [2006] MySQL server has gone away」 hostの確認もしてみました。IP contaner IDの順で記載されているのも把握できました。 すみません、そこからの接続がわからないです・・・ 172.20.0.2 c8ef6962eac6
taka96

2018/03/06 16:32

上記解決しました。後日解決方法を更新します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問