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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

Q&A

解決済

1回答

1820閲覧

dockerで作成したmysqlコンテナに、phpから接続できない

niey

総合スコア10

docker-compose

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

0グッド

2クリップ

投稿2019/05/01 06:54

概要

docker上でnginx, php, mysql, phpmyadmin, CodeIgniterが動作する環境を構築しようと考えています。
nginx, php, mysql, phpmyadminのそれぞれの動作の確認はできているのですが、php側からmysqlに接続することができません。ポートやmysqlのログイン情報などを変更し、試行錯誤しましたが、php上でmysqli(), mysql_connect, PDOのどれもが、正しく接続できません。下記コードに誤りがございましたら、ご教授をよろしくお願いします。

##ソースコード
docker-compose.yml

version: '3' services: nginx: container_name: cp_nginx image: nginx:1.13.5-alpine build: ./nginx ports: - "8080:80" volumes: - ./nginx/default.conf:/etc/nginx/conf.d/default.conf - ./public_html:/var/www/public_html links: - mysql - php php: container_name: cp_php build: context: ./ dockerfile: ./php/Dockerfile image: php:7-fpm-alpine volumes: - ./php/php.ini:/etc/php/php.ini - ./public_html:/var/www/public_html - ./app/application:/var/www/application - ./app/system:/var/www/system links: - mysql mysql: container_name: cp_mysql image: mysql:5.7 volumes: - ./mysql/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: cp_db pma: container_name: cp_phpmyadmin image: phpmyadmin/phpmyadmin:4.6.4-1 ports: - "5000:80" environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=password links: - mysql depends_on: - mysql volumes: - ./phpmyadmin/sessions:/sessions

php/Dockerfile

FROM php:7-fpm RUN apt-get update RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli RUN mkdir -p /etc/php/ RUN mkdir -p /var/www/public_html/ RUN mkdir -p /var/www/application RUN mkdir -p /var/www/system ADD ./public_html /var/www/public_html ADD ./app/application /var/www/application ADD ./app/system /var/www/system RUN ls /var/www/public_html/

nginx/Dockerfile

FROM nginx:latest RUN echo "now building..." RUN mkdir -p /etc/nginx/conf.d

index.php

<?php $mysqli = new mysqli('127.0.0.1:80', 'root', 'password', 'cp_db'); if (!class_exists('mysqli')) { echo 'We don\'t have mysqli class!!!'; } else { echo 'Phew we have it!'; } ?>

##実行方法

$docker-compose up -d $docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4150b540a57f nginx:1.13.5-alpine "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp cp_nginx 7d36ef85271a php:7-fpm-alpine "docker-php-entrypoi…" 2 minutes ago Up 2 minutes 80/tcp, 8080/tcp, 9000/tcp cp_php 47305ce0aa95 phpmyadmin/phpmyadmin:4.6.4-1 "/run.sh" 2 minutes ago Up 2 minutes 0.0.0.0:5000->80/tcp cp_phpmyadmin 130c05ec5d12 mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 3306/tcp, 33060/tcp cp_mysql

ブラウザでhttp://127.0.0.1:8080にアクセス

##実行結果

Warning: mysqli::__construct(): (HY000/2002): Connection refused in /var/www/public_html/index.php on line 12 Phew we have it!

##試したこと

phpmyadmin側からmysqlのログイン情報の変更(user=> root, password=> password) index.phpの2行目のホスト名をlocalhost, localhost:8080, localhost:5000, localhost:3306, localhost:80, 127.0.0.1, 127.0.0.1:8080, 127.0.0.1:5000, 127.0.0.1:3306, 127.0.0.1:80, 0.0.0.0, 0.0.0.0:8080, 0.0.0.0:5000, 0.0.0.0:3306, 0.0.0.0:80へ変更

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

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

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

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

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

guest

回答1

0

ベストアンサー

php

1$mysqli = new mysqli('127.0.0.1:80', 'root', 'password', 'cp_db');

の127.0.0.1:80は、mysqlかと。↓

php

1$mysqli = new mysqli('mysql', 'root', 'password', 'cp_db');

phpが動いているコンテナとmysqlが動いているコンテナは別だから、127.0.0.1では通信できないです。

投稿2019/05/01 07:15

mobilefan8

総合スコア85

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

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

niey

2019/05/01 07:30

動きました!ありがとうございます!! mysqlのホスト名はmysqlなんですね...勉強になります。
mobilefan8

2019/05/01 08:59

docker-compose.yml にそう書いてありますよ?
niey

2019/05/07 12:20

理解が及んでいませんでした.. なんとなくで使って体感で覚えるもんじゃないですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問