前提
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

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/28 11:43
2022/09/29 05:37