PHPMyadmin在登录时显示主机而不是localhost



这是我第一个将Docker与Nginx-PHP-MariaDB phpmyadmin一起用于我的辅助项目的web堆栈。一切都很完美。但我对我的phpmyadmin有点困惑。

我注意到,当我登录phpmyadmin时,为什么phpmyadmin会在我的用户名后面弹出一个主机地址?示例:我有用户名调用";测试"-当我登录到myadminphp时,它在下面显示错误

mysqli::real_connect(): (HY000/1045): Access denied for user 'test'@'192.168.0.4' (using password: YES)

当我在mariadb终端中创建用户时,它会给我test@localhost,而不是test'@'192.168.0.4'。通过使用

CREATE USER 'test'@'localhost';

授予我的test@localhost用户完全权限

GRANT ALL ON my_db.* TO 'test'@'localhost';
FLUSH PRIVILEGES;

我可以使用mysql -u test -p作为用户登录这让我很困惑。

我的案子发生了什么事?我可以在PHPmyadmin中从"test"@"192.168.0.4"切换到test@localhost吗?

Docker compose.yml

version: '3.9'
services:
web:
image: nginx:latest
restart: 'always'
ports:
# Use port 80
- "80:80"
# Copy default config file to default folder
# By using volumes keywords
volumes:
- /home/hoangtho/Projects/:/usr/share/nginx/html/
- ./nginx.conf:/etc/nginx/conf.d/default.conf
php:
image: php:7.3-fpm-alpine
restart: "always"
build:
context: './php/'
volumes:
- /home/hoangtho/Projects/:/usr/share/nginx/html/

# PHP
mariadb:
image: mysql
restart: "always"
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
# PHPMYADMIN
phpmyadmin:
image: phpmyadmin
restart: always
volumes:
- ./mysql:/var/lib/mysql
environment:
PMA_ARBITRARY: 1
PMA_HOST: mariadb
PMA_HOSTS: localhost,127.0.0.1

ports:
- "81:80"

Nginx.conf

server {
listen 80;
index index.php index.html;
server_name localhost;
error_log  /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root   /usr/share/nginx/html;
autoindex on;
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

Dockerfile


FROM php:7.3-fpm-alpine
RUN docker-php-ext-install  mysqli

发生这种情况的原因是MySQL根据您连接服务器的方式返回错误消息。当您连接到"localhost"时,它会使用套接字,当您通过任何其他主机(包括127.0.0.1(连接时,它使用TCP/IP网络。MySQL/MariaDB用户需要一个主机字段,该字段可以是localhost、IP地址或主机名,也可以是通配符运算符%。问题是通配符运算符不包括localhost连接。

由于您连接到的数据库与phpMyAdmin不在同一服务器上运行,因此您的连接不是通过localhost进行的,因此用户的主机字段不能为"locahost"。切换到test@localhost将无法工作,因为Docker网络的功能导致连接不是本地的。

这里问题的另一部分是,您告诉phpMyAdmin连接到三个服务器,mariadb、localhost和127.0.0.1,这很奇怪,可能不需要。根据您所描述的内容,您应该从docker-compose.yml中完全删除数组PMA_HOSTS,并保留PMA_HOST: mariadb

因此,调整您的PMA_HOSTS并将您的用户更改为@'%'或@'192.168.0.4',这应该可以解决这些问题。

相关内容

最新更新