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

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

新規登録して質問してみよう
ただいま回答率
85.53%
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

解決済

2回答

3743閲覧

Docker上のphpMyAdminにログインしようとすると「mysqli::real_connect():(HY000/2002)」のエラーがでます。

y_programming

総合スコア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つです

0グッド

0クリップ

投稿2022/09/26 08:03

編集2022/10/01 10:44

前提

docker-composeを使い、webという名前のコンテナとdbという名前のコンテナの計2つのコンテナを作成しました。
webコンテナにはPHP、phpMyAdmin、Apacheがはいっています。
dbコンテナには、MySQLがはいっています。
http://localhost:8080/phpmyadmin/ 」 にアクセスすると、正しくエラーなしでphpMyAdminの
ログイン画面が表示されるのですが、ユーザ名とパスワードを入力してログインしようとしても、

  • MySQL サーバにログインできません
  • mysqli::real_connect(): (HY000/2002): No such file or directory

の2つのエラーが表示され、ログインすることができない状態です。
何が原因でログインに失敗したいのかご存じの方がいらっしゃれば教えていただきたいのです!
Dockerのコンテナ起動に使用した各種ファイルの構成は、以下のようになっております。

_ディレクトリ構成図

1phpmyadmin_test/ 2 ├ web/ 3 │ ├ conf/ 4 │ │ ├ httpd.conf 5 │ │ └ phpMyAdmin.conf 6 │ │ 7 │ └ html/ 8 │   └ index.php 9 │ 10 ├ docker-compose.yml 11 ├ Dockerfile_db 12 └ Dockerfile_web

合計で6つのファイルがありますので、以下にその6ファイルについて内容を記載します。
teratailの1万文字の文字数制限に抵触したため、6つのうち5つしかペーストする事ができませんでした。
「phpmyadmin_test/web/conf/httpd.conf」は記載しておりませんが、必須という場合はほかの手段で定時いたします。

phpmyadmin_test/web/conf/phpMyAdmin.conf

1# phpMyAdmin - Web based MySQL browser written in php 2# 3# Allows only localhost by default 4# 5# But allowing phpMyAdmin to anyone other than localhost should be considered 6# dangerous unless properly secured by SSL 7 8Alias /phpMyAdmin /usr/share/phpMyAdmin 9Alias /phpmyadmin /usr/share/phpMyAdmin 10 11<Directory /usr/share/phpMyAdmin/> 12 AddDefaultCharset UTF-8 13 14 <IfModule mod_authz_core.c> 15 # Apache 2.4 16 <RequireAny> 17 #Require ip 127.0.0.1 18 #Require ip ::1 19 Require all granted 20 </RequireAny> 21 </IfModule> 22 <IfModule !mod_authz_core.c> 23 # Apache 2.2 24 Order Deny,Allow 25 Deny from All 26 Allow from 127.0.0.1 27 Allow from ::1 28 </IfModule> 29</Directory> 30 31<Directory /usr/share/phpMyAdmin/setup/> 32 Require local 33</Directory> 34 35# These directories do not require access over HTTP - taken from the original 36# phpMyAdmin upstream tarball 37# 38<Directory /usr/share/phpMyAdmin/libraries/> 39 Require all denied 40</Directory> 41 42<Directory /usr/share/phpMyAdmin/templates/> 43 Require all denied 44</Directory> 45 46<Directory /usr/share/phpMyAdmin/setup/lib/> 47 Require all denied 48</Directory> 49 50<Directory /usr/share/phpMyAdmin/setup/frames/> 51 Require all denied 52</Directory> 53 54# This configuration prevents mod_security at phpMyAdmin directories from 55# filtering SQL etc. This may break your mod_security implementation. 56# 57#<IfModule mod_security.c> 58# <Directory /usr/share/phpMyAdmin/> 59# SecRuleInheritance Off 60# </Directory> 61#</IfModule>

phpmyadmin_test/web/html/index.php

1<?php 2phpinfo();

phpmyadmin_test/dockerハイフンcompose.yml

1version: '3.7' 2services: 3 db: 4 container_name: db 5 restart: always 6 build: 7 context: . 8 dockerfile: Dockerfile_db 9 tty: true 10 environment: 11 MYSQL_ROOT_PASSWORD: root 12 MYSQL_USER: user 13 MYSQL_PASSWORD: user 14 MYSQL_HOST: db 15 LANG: 'en_US.UTF-8' 16 ports: 17 - "3306:3306" 18 privileged: true 19 networks: 20 - app-net 21 web: 22 container_name: web 23 restart: always 24 build: 25 context: . 26 dockerfile: Dockerfile_web 27 volumes: 28 - ./web/html:/data/www/html 29 - ./web/conf/httpd.conf:/etc/httpd/conf/httpd.conf 30 - ./web/conf/phpMyAdmin.conf:/etc/httpd/conf.d/phpMyAdmin.conf 31 ports: 32 - "8080:80" 33 privileged: true 34 tty: true 35 environment: 36 - PMA_ARBITRARY=1 37 - PMA_USER=user 38 - PMA_PASSWORD=user 39 - PMA_HOST=db 40 - PMA_PORT=3306 41 depends_on: 42 - db 43 networks: 44 - app-net 45networks: 46 app-net: 47 driver: bridge

phpmyadmin_test/Dockerfile_db

1FROM almalinux:9.0 2 3RUN set -x && \ 4 dnf -y update && \ 5 dnf -y upgrade && \ 6 dnf install -y which && \ 7 dnf install -y procps && \ 8 dnf install -y epel-release && \ 9 dnf -y install pcre-devel && \ 10 dnf -y install expat-devel && \ 11 dnf -y install wget && \ 12 dnf -y install make && \ 13 dnf -y install gcc && \ 14 dnf -y install firewalld && \ 15#MySQLをインストール 16 dnf upgrade --refresh -y && \ 17 dnf install mysql mysql-server -y 18CMD ["/sbin/init"]

phpmyadmin_test/Dockerfile_web

1FROM almalinux:9.0 2 3RUN set -x && \ 4 dnf -y update && \ 5 dnf -y upgrade && \ 6 dnf install -y which && \ 7 dnf install -y procps && \ 8 dnf install -y epel-release && \ 9 dnf -y install pcre-devel && \ 10 dnf -y install expat-devel && \ 11 dnf -y install wget && \ 12 dnf -y install make && \ 13 dnf -y install gcc && \ 14 dnf -y install mysql && \ 15#PHPとApacheのインストール 16 dnf upgrade --refresh -y && \ 17 rpm --import http://rpms.remirepo.net/RPM-GPG-KEY-remi && \ 18 dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y && \ 19 dnf module enable php:remi-8.1 -y && \ 20 dnf install php php-cli -y && \ 21 mkdir /data && \ 22 mkdir /data/www && \ 23 mkdir /data/www/html && \ 24#phpMyAdminのインストール 25 dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y && \ 26 dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y && \ 27 dnf install https://rpms.remirepo.net/enterprise/9/remi/x86_64/php-fedora-autoloader-1.0.1-2.el9.remi.noarch.rpm -y && \ 28 dnf --enablerepo=remi install phpMyAdmin -y && \ 29 ln -s /usr/share/phpMyAdmin/ /data/www/html/phpmyadmin 30CMD ["/sbin/init"]

実現したいこと

phpMyAdminのログインを成功させ、管理画面のなかにはいりたいのです!

実際におこなった作業の流れ

phpmyadmin_testフォルダにて、構築作業を以下の流れでおこないました。

> ls Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022/09/26 14:29 web -a---- 2022/09/26 14:34 998 docker-compose.yml -a---- 2022/09/26 14:35 509 Dockerfile_db -a---- 2022/09/26 14:39 1246 Dockerfile_web

docker-composeのビルドができるディレクトリにいることを確認しました。
ビルドを行います。

> docker-compose build --no-cache

ビルドが終わったので、コンテナを起動します。

> docker-compose up -d Creating network "phpmyadmin_test_app-net" with driver "bridge" Creating db ... done Creating web ... done

コンテナが起動したことを確認しました!

> docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1ddafcb8ae8 phpmyadmin_test_web "/sbin/init" 26 seconds ago Up 25 seconds 0.0.0.0:8080->80/tcp web 225b93ad7b32 phpmyadmin_test_db "/sbin/init" 28 seconds ago Up 27 seconds 0.0.0.0:3306->3306/tcp db

まだApacheが立ち上がっていないので、立ち上げるためにwebコンテナにログインします。

> docker exec -it web /bin/bash

Apacheを起動しました。

# systemctl start httpd

Apacheを起動できたのでwebコンテナからログアウトします。

# exit exit

MySQLを起動するなど準備があるので、dbコンテナにログインします。

> docker exec -it db /bin/bash

いったんパスワードなしでMySQLにログインできるよう設定し、MySQLを起動します。
(どうも初期設定だとパスワードを使用してのMySQLログインができないようでした)

# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" # systemctl start mysqld

MySQLへログインします。(「mysql -u root」の場合エラーが出るようでしたので、-hのオプションを使いエラー回避します)

# mysql -h 127.0.0.1 -u root ↓ mysql> flush privileges; Query OK, 0 rows affected (0.08 sec) ↓ mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootpass'; Query OK, 0 rows affected (0.01 sec) ↓ mysql> quit Bye ↓ # systemctl stop mysqld ↓ # systemctl unset-environment MYSQLD_OPTS ↓ systemctl start mysqld ↓ # mysql -h 127.0.0.1 -u root -prootpass ↓ mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'rootpass'; Query OK, 0 rows affected (0.02 sec) ↓ mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec) ↓ mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) ↓ mysql> exit Bye ↓ # systemctl start firewalld ↓ # firewall-cmd --permanent --add-service=mysql success ↓ # systemctl restart firewalld ↓ # exit

ためしたこと

webコンテナから、MySQLがインストールされているdbコンテナのMySQLへのログインできるかためしてみました。行ったコマンドは以下のものです!

webコンテナからdbコンテナのMySQLへログインができるか検証するため、まずはwebコンテナへログインします。

> docker exec -it web /bin/bash

そして、webコンテナから、dbコンテナのIPアドレス(もしくはコンテナID)を指定して、dbコンテナのMySQLへログインします。

# mysql -h dbコンテナのIPアドレス -P 3306 -u root -prootpass

※あらかじめdbコンテナへログインし、「hostname -i」でdbコンテナのIPアドレスを取得し、それを「-h」のあとにつけました。
結果、以下のようにwebコンテナからdbコンテナへログインすることができました。
webコンテナからdbコンテナのMySQLへはいることができるということが確認できたため、
webコンテナのphpMyAdminにログインし、dbコンテナのMySQLのデータベースを参照したり更新したり
できるようになりそうと考えました。

# mysql -h 172.22.0.2 -P 3306 -u root -prootpass

そして目的である、
http://localhost:8080/phpmyadmin/
へアクセスし、ログインを成功させたいのです!
上記のURLにアクセスしてみると、phpMyAdminのログイン画面がエラー無しで表示されます。
イメージ説明
ここまでは異常なしと考えておりましたが、ユーザ名とパスワードを入力してのログインに失敗するため、
その原因を特定し解決したく今回の質問を投稿させていただきました。
イメージ説明
ユーザ名:root
パスワード:rootpass

こちらを入力しログインしようとしても失敗してしまう、というのが現状となります。
dockerタグとphpMyAdminタグが適切かと思ったのですが、関連すると思われるタグをつけております。
タグ付けが適切な状態か判断できておらず、そちらについてご指摘がございましたら、頂戴できますと幸いです。
よろしくお願いいたします。
また、関連するファイルに提示漏れがあればそちらについてもご指摘をいただけますと嬉しいです。


追記をします!(2022年9月26日20時33分)

webコンテナには「/var/lib/mysql/mysql.sock」が存在しない様子

1> docker exec -it web /bin/bash 2[root@3a6b90c1d94d /]# mysql -u root -p 3Enter password: 4ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 5[root@3a6b90c1d94d /]# ls /var/lib/mysql/ | grep mysql.sock 6ls: cannot access '/var/lib/mysql/': No such file or directory 7[root@3a6b90c1d94d /]# ls /var/lib/ 8alternatives httpd phpMyAdmin rpm-state tpm2-tss 9dnf misc private selinux 10games php rpm systemd

今回webコンテナとdbコンテナの計2つのコンテナをつくっておりますが、webコンテナの方で「mysql.sock」がないらしいことがわかりました。
webコンテナからdbコンテナのMySQLにログインするときにエラーが出ないのは前述のとおりですが、webコンテナのなかではエラーがでていました。上記の「mysql -u root -p」で発生したエラーの「ERROR 2002 (HY000)~」という内容は、phpMyAdminでログインに失敗した時に画面表示された「mysqli::real_connect(): (HY000/2002): No such file or directory」と酷似しているため、webコンテナ側に「/var/lib/mysql/mysql.sock」が存在しないのが今回のエラーの原因と信じ、どうすればエラーが消えるか引き続き調査をしていきます!

dbコンテナに「/var/lib/mysql/mysql.sock」が存在する様子

1> docker exec -it db /bin/bash 2[root@89a91b163c4f /]# ls /var/lib/mysql/ | grep mysql.sock 3mysql.sock 4mysql.sock.lock

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

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

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

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

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

guest

回答2

0

解決済みになるかテスト

投稿2022/09/28 11:41

y_programming

総合スコア48

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

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

y_programming

2022/09/28 11:43

解決済みにできず残念ですが、ずっとこのままであれば運営の方に解決済みにしてくださいとおねがいしてみようとおもいます
y_programming

2022/09/29 05:37

どうも勘違いしていたようです、解決済みになっていました!よかったです・・・
guest

0

今回webコンテナとdbコンテナの2つにコンテナを分離していたのですが、webコンテナにMySQLをインストールしていない影響で、「/var/lib/mysql/mysql.sock」が存在しないのが今回のエラーの原因でした!

webコンテナ側にMySQLをインストールする

systemctl start mysqld

ここで「/var/lib/mysql/」配下に一斉にファイルがつくられ、そのときにmysql.sockも新規作成されました。
phpMyAdmin経由でdbコンテナに接続するときにwebコンテナ側にmysql.sockがないことによりこのエラーが発生した、と気付くのにかなり時間がかかってしまいましたが、なんとか解決に至りました!

投稿2022/09/28 11:38

編集2022/10/01 01:44
y_programming

総合スコア48

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

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

y_programming

2022/09/28 11:41

解決済みにしようとするとなぜか失敗するのであらためて挑戦したいとおもいます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問