无法通过浏览器登录MySQL服务器

时间:2019-08-20 22:35:59

标签: docker docker-compose dockerfile

每次尝试从浏览器访问phpmyadmin时,都会收到此错误: “无法登录到MySQL服务器”

我试图更改网络,重新启动docker。

version: '3'

services:
 web: 
  image: nginx:alpine
  ports:
   - 80:80
  volumes:
   - ./public_html:/public_html
   - ./conf.d:/etc/nginx/conf.d
  networks:
   - nginxphp

 php:
  image: php:7.1.11-fpm-alpine
  volumes:
   - ./public_html:/public_html
  expose:
   - 9000
  networks:
   - nginxphp

 db:
  image: mysql
  environment:
   MYSQL_ROOT_PASSWORD: root
  ports:
   - "3306:3306"
 phpmyadmin:
  image: phpmyadmin/phpmyadmin
  environment:
    MYSQL_ROOT_PASSWORD: root 
    MYSQL_USER: root
    MYSQL_PASSWORD: root
  depends_on:
   - db
  ports:
   - "8080:80"

networks:
    nginxphp:

无法登录到MySQL服务器 mysqli_real_connect():服务器请求客户端未知的身份验证方法[caching_sha2_password] mysqli_real_connect():(HY000 / 2054):服务器请求客户端未知的身份验证方法

3 个答案:

答案 0 :(得分:0)

免责声明:我不是Docker用户!

您没有提及您是在与服务器所在的计算机上还是在远程计算机上使用浏览器。您需要通过终端(命令提示符)访问mysql服务器(mysqld)。如果这是新安装,则必须在运行mysql服务器的计算机上。

在Docker mysql页面中: “ MySQL的默认配置可以在/etc/mysql/my.cnf中找到,其中可能包含其他目录,例如/etc/mysql/conf.d或/etc/mysql/mysql.conf.d。”

尝试在您尝试访问的服务器上的/etc/mysql/my.cnf文件中查找。第一。您正在寻找:

bind-address = x.x.x.x

这是mysql服务器将与之通信的地址(“绑定至”)。通常是“ localhost”或“ 127.0.0.1”。

要消除您看到的错误消息,我必须做两件事:

1)将“绑定地址更改为0.0.0.0” 这使服务器可以连接到任何计算机。但是,这是一种安全风险。一旦工作,请在mysql网站上阅读有关绑定地址的信息并进行适当设置。

2)创建一个新帐户user @ ipaddr,其中user是新的用户名,IPAddress是您尝试连接的计算机的ip4地址。即:

CREATE USER 'user'@'192.168.1.68' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.1.68';

现在尝试通过终端程序在计算机上使用您在上面输入的IP的新用户名通过键入以下内容来访问mysql:

mysql -uuser -ppassword -hx.x.x.x

希望这将帮助您指出正确的方向。网络上有大量有关绑定地址和安全性的信息。

答案 1 :(得分:0)

因为phpmyadmin容器已连接到默认主机localhost。但是您的mysql服务器位于其他容器中(这意味着您无法使用localhost连接到mysql服务器)。因此,在phpmyadmin服务中,您必须设置PMA_HOST=db。查看完整的环境变量:https://hub.docker.com/r/phpmyadmin/phpmyadmin/

完整的docker-compose.yml:

version: '3'

services:
 web: 
  image: nginx:alpine
  ports:
   - 80:80
  volumes:
   - ./public_html:/public_html
   - ./conf.d:/etc/nginx/conf.d
  networks:
   - nginxphp

 php:
  image: php:7.1.11-fpm-alpine
  volumes:
   - ./public_html:/public_html
  expose:
   - 9000
  networks:
   - nginxphp

 db:
  image: mysql
  environment:
   MYSQL_ROOT_PASSWORD: root
  ports:
   - "3306:3306"
 phpmyadmin:
  image: phpmyadmin/phpmyadmin
  environment:
    PMA_HOST: db
    MYSQL_ROOT_PASSWORD: root 
    MYSQL_USER: root
    MYSQL_PASSWORD: root
  depends_on:
   - db
  ports:
   - "8080:80"

networks:
    nginxphp:

答案 2 :(得分:0)

如果您将phpmyadmin与最新的mysql版本一起使用,则会遇到一些登录问题:

无法登录到MySQL服务器mysqli_real_connect(): 服务器请求客户端未知的身份验证方法[caching_sha2_password] mysqli_real_connect():(HY000 / 2054): 服务器请求客户端未知的身份验证方法

解决方案是降级到mysql 5.7或其他版本。 我测试了mysql 5.7,它对我有用。 如果您想测试其他版本,并通知社区。

下面是构建并运行Nginx + php 7.1 + mysql 5.7 + phpmyadmin的docker-compose文件

version: '3'

services:

 web: 
  image: nginx:alpine
  ports:
   - 80:80
  volumes:
   - ./public_html:/public_html
   - ./conf.d:/etc/nginx/conf.d
  networks:
   - nginxphp

 php:
  image: php:7.1.11-fpm-alpine
  volumes:
   - ./public_html:/public_html
  expose:
   - 9000
  networks:
   - nginxphp

 db:
  image: mysql:5.7
  ports:
   - "3306:3306"
  environment:
   MYSQL_ROOT_PASSWORD: root

 phpmyadmin:
  image: phpmyadmin/phpmyadmin
  links:
   - db
  environment:
    PMA_HOST: db
    PMA_PORT: 3306
    MYSQL_USER: root
    MYSQL_PASSWORD: root
    MYSQL_ROOT_PASSWORD: root 
  depends_on:
   - db
  ports:
   - "8080:80"

networks:
    nginxphp:

希望这可以节省一些时间!