Windows10からDockerを利用してApache+PHP+MySQLの環境を作ろうと思いDockerfileとdocker-composeを利用しました。PHPのコンテナ化、MySQLのコンテナ化は確認できたのですがPHPからMySQLへ接続しようとするとSQLSTATE[HY000] [2002] Connection refused
というエラーが表示され接続できません。PHPからMySQLへの接続を確認したいです。
検索してもわからなかった疑問としてindex.phpから接続を確認する際のuser
とpassword
はdocker-composeに指定したMYSQL_USER
とMYSQL_PASSWORD
で合っているのかという点です。
どなたかアドバイスをいただけると嬉しいです。よろしくお願いいたします。
各種設定ファイル
DockerCompose
1version: '3' 2services: 3 php: 4 build: ./php 5 volumes: 6 - ./php:/var/www/html 7 ports: 8 - 8080:80 9 depends_on: 10 - db 11 db: 12 build: ./mysql 13 command: 14 mysqld --default-authentication-plugin=mysql_native_password 15 environment: 16 MYSQL_ROOT_PASSWORD: **** 17 MYSQL_DATABASE: db 18 MYSQL_USER: user 19 MYSQL_PASSWORD: **** 20 TZ: 'Asia/Tokyo' 21 ports: 22 - "3306:3306" 23 volumes: 24 - ./mysql/mysql_init:/docker-entrypoint-initdb.d 25 - ./mysql/mysql_data:/var/lib/mysql 26 - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
DockerfilePHP
1FROM php:8.0.6-apache 2 3COPY ./php.ini /usr/local/etc/php 4 5RUN apt-get update \ 6 && docker-php-ext-install pdo_mysql mysqli
DockerfileMySQL
1FROM mysql:8.0 2 3COPY ./my.cnf /etc/mysql/conf.d/my.cnf 4 5RUN chmod 644 /etc/mysql/my.cnf
PHPini
1[Date] 2date.timezone = "Asia/Tokyo" 3[mbstring] 4mbstring.internal_encoding = "UTF-8" 5mbstring.language = "Japanese" 6pdo_mysql.default_socket=/tmp/mysql.sock 7mysql.default_socket=/tmp/mysql.sock 8mysqli.default_socket=/tmp/mysql.sock
Mycnf
1[mysql] 2default-character-set=utf8mb4 3 4[mysqld] 5character-set-server=utf8mb4 6collation-server=utf8mb4_unicode_ci 7 8[client] 9default-character-set=utf8mb4
indexPHP
1<?php 2$dsn = 'mysql:dbname=db;port=3306;charset=utf8mb4;host=127.0.0.1'; 3$user = 'user'; 4$password = '****'; 5 6 7try { 8 $dbh = new PDO($dsn, $user, $password); 9 echo "接続に成功しました\n"; 10} catch (PDOException $e) { 11 echo "接続に失敗しました\n"; 12 echo $e->getMessage() . "\n"; 13}
試したこと
- index.phpの
$dsn
のなかでhost=localhost
を指定するとSQLSTATE[HY000] [2002] No such file or directory
のエラーになる - コマンドプロンプトからMySQLにログインし
select user, plugin from user;
でroot, userのpluginがmysql_native_password
であることを確認 - MySQLのDockerfileで
RUN chmod 777 /usr/local/var/mysql
を指定するがbuildでエラーになり権限を与えられない - MySQLにログインし
mysql > GRANT ALL ON *.* TO $DB_USER@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT OPTION;
で127.0.0.1
に権限を与えようとするとERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql > GRANT ALL ON *.* TO $DB_USER@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT' at line 1
というエラーになる
ソフトウェアとイメージファイル
- Windows 10
- Docker: 20.10.6, build 370c289
- MySQL: 8.0
- PHP: 8.0.6-apache
フォルダ構成
- Dockerフォルダのなかにmysql, php, web, docker-compose.yml
- mysqlのなかにmysql_data, mysql_init, Dockerfile, my.cnf
- phpのなかにDockerfile, index.php, php.ini
回答2件
あなたの回答
tips
プレビュー