Docker 容器无法连接到其 mysql 服务器(拒绝访问)

Docker container can't connect to its mysql server (ACCESS DENIED)

我创建了一个 docker 容器及其 ​​mysql 服务器,如下所示:

docker run -d\
    --name mysql-server
    --restart on-failure\
    -e MYSQL_ROOT_PASSWORD=1234\
    -e MYSQL_DATABASE=users\
    -v volume1:/var/lib/mysql\
    mysql:latest --default-authentication-plugin=mysql_native_password

但是当我尝试登录时出现拒绝访问错误。以下是我尝试登录 mysql 服务器的方式:

docker exec -it spawning-pool mysql -uroot -p

这是我得到的回复:

Enter password: (I put 1234 here)
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

docker ps -a 显示:

6909b7003519        mysql:latest        "docker-entrypoint.s…"   38 minutes ago      Up 38 
    minutes            3306/tcp, 33060/tcp    mysql-server

docker exec mysql-server env 显示:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=6909b7003519
    MYSQL_ROOT_PASSWORD=1234
    MYSQL_DATABASE=users
    GOSU_VERSION=1.7
    MYSQL_MAJOR=8.0
    MYSQL_VERSION=8.0.18-1debian9
    HOME=/root

我试过更改 mysql 版本,但这不起作用。获取随机密码有效,我不知道为什么。我也不能使用随机密码,因为这是一个学校项目,我必须遵循一些指导方针。我已经为此花费了数小时,非常感谢任何帮助。

似乎您必须更改密码和 运行 现有卷的命令,因此它不会将新密码设置为 Docker MySQL 图像的默认行为。

你有两个选择

  • 尝试移除体积和运行容器
docker volume rm volume1 && docker run -it --rm -v volume1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 -e MYSQL_DATABASE=users mysql:latest --default-authentication-plugin=mysql_native_password
  • 尝试运行使用在创建卷时设置的旧密码

登录到您的 docker 机器并检查 mysql 服务器 运行ning。 我有类似的问题。在我的情况下 MySQL 服务器在容器 运行 之后启动。 已帮助:

ENTRYPOINT service mysql start && /bin/bash

Here 是两个服务器的完整工作示例:apache 和 mysql 在两个不同的容器上

希望对你有所帮助