SQLSTATE[HY000] [1045] 使用 Docker 拒绝用户 'root'@'172.19.0.4' 的访问

Posted

技术标签:

【中文标题】SQLSTATE[HY000] [1045] 使用 Docker 拒绝用户 \'root\'@\'172.19.0.4\' 的访问【英文标题】:SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.19.0.4' with DockerSQLSTATE[HY000] [1045] 使用 Docker 拒绝用户 'root'@'172.19.0.4' 的访问 【发布时间】:2019-05-15 21:16:14 【问题描述】:

我目前正在学习在 Windows 上使用 Docker,我正在关注这个tutorial。对于 Docker 设置,我使用的是 Laradock。我正在尝试运行 mysql apache2 rabbitmq 和 phpmyadmin 容器,我所做的一切都与视频中的相同,但是当我尝试迁移我的表时出现以下错误:

Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] 用户 'root'@'172.19.0.4' 的访问被拒绝(使用密码:YES)

我在 phpmyadmin 中创建了空数据库。

一切都在我的项目 .env 和 laradock/.env 中配置

我的项目环境:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_database_name
DB_USERNAME=root
DB_PASSWORD=*********

我再次检查了我的密码,它是正确的。

我的 laradock/.env 配置:

MYSQL_VERSION=latest
MYSQL_DATABASE=my_database_name
MYSQL_USER=root
MYSQL_PASSWORD=******
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=******

Docker-compose.yml 配置:

mysql:
  build:
    context: ./mysql
    args:
      - MYSQL_VERSION=$MYSQL_VERSION
  environment:
    - MYSQL_DATABASE=$MYSQL_DATABASE
    - MYSQL_USER=$MYSQL_USER
    - MYSQL_PASSWORD=$MYSQL_PASSWORD
    - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
    - TZ=$WORKSPACE_TIMEZONE
  volumes:
    - $DATA_PATH_HOST/mysql:/var/lib/mysql
    - $MYSQL_ENTRYPOINT_INITDB:/docker-entrypoint-initdb.d
  ports:
    - "$MYSQL_PORT:3306"
  networks:
    - backend

为确保我的所有容器都正常工作,我输入此命令并得到以下响应:

docker-compose ps

Response from previous command

我的 phpmyadmin 中的根用户:

image

【问题讨论】:

您检查过您的用户的权限吗? 这个用户拥有所有权限,因为它是我的主要用户。我在使用 XAMPP/phpmyadmin 时连接和运行迁移没有问题,但是当我使用 docker 时,会发生这种情况 会不会是docker连接不上你的XAMPP? 【参考方案1】:

可能与bind-address 仅接受本地主机连接有关。查看如何在 mysql 容器中使用 custom mysqld.conf 的示例

【讨论】:

我忘了说,昨晚我设法在另一个项目上设置了所有内容,并且一切正常。有一些类似的错误,但设法克服了它们。但是今天,我对这个错误无能为力。 这将产生“连接被拒绝”错误,而不是“权限被拒绝”错误。【参考方案2】:

通过将我的 .env mysql 用户名和密码配置更改为:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_database_name
DB_USERNAME=root
DB_PASSWORD=root

并将 laradock/.env 配置中的 mysql 版本更改为:

MYSQL_VERSION=5.7
MYSQL_DATABASE=my_database_name
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

之后,我停止了所有容器:

docker-compose down

下一步是使用新配置构建 mysql 容器:

docker-compose build --no-cache mysql

之后,我再次运行所有容器

docker-compose up -d mysql apache2 rabbitmq phpmyadmin

导航到工作区工作目录并迁移我的表:

php artisan migrate

一切都按预期进行:

迁移表创建成功。

迁移:2018_11_28_114446_create_accounts_table

迁移:2018_11_28_114446_create_accounts_table

【讨论】:

【参考方案3】:

实际上你不能在docker的.env文件中创建root用户。默认情况下会创建 Root 用户,如果您想使用它,只需为其设置密码:MYSQL_ROOT_PASSWORD in laradock。然后如果你想创建另一个用户,设置MYSQL_USERMYSQL_PASSWORD

所以在 laradock/.env 文件中:

MYSQL_VERSION=5.7
MYSQL_DATABASE=my_database_name
MYSQL_USER=myusername // any name other than root
MYSQL_PASSWORD=mypassword
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=rootPassword // password to root user
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

现在你可以在你的 laravel 项目中使用root 用户或myusername 用户:

MYSQL_USER=root
MYSQL_PASSWORD=rootPassword 

OR 

MYSQL_USER=myusername 
MYSQL_PASSWORD=mypassword

记住,要在 laradock 中连接正确的数据库主机,你应该在 laravel 中使用 mysql 而不是 localhost or 127.0.0.1

DB_HOST=mysql

【讨论】:

【参考方案4】:

如果您使用 Laradock,那么所有内容都在 laradock/mariadb/docker-entrypoint-initdb.d/createdb.sql.example 中进行了说明

您必须删除文件夹 $DATA_PATH_HOST/mariadb,并在 /docker-entrypoint-initdb.d/myScript.sql 中创建新用户

例子:

DROP USER IF EXISTS 'user'@'%' ;

FLUSH PRIVILEGES;

CREATE USER 'user' IDENTIFIED BY 'pass';
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'pass';
GRANT ALL privileges ON *.* TO 'user'@'%';
CREATE DATABASE IF NOT EXISTS `symfonydb1` COLLATE 'utf8_general_ci';

FLUSH PRIVILEGES;

【讨论】:

【参考方案5】:

这对我有好处:

rm -rf /root/.laradock

【讨论】:

【参考方案6】:

对于那些可能遇到这个问题的人,它有一个非常简单的解决方案。

只需将您的密码放在双引号中即可。在 .env 或 docker-compose.yml 中

【讨论】:

以上是关于SQLSTATE[HY000] [1045] 使用 Docker 拒绝用户 'root'@'172.19.0.4' 的访问的主要内容,如果未能解决你的问题,请参考以下文章

意外异常:SQLSTATE[HY000] [1045] 用户 ****@'localhost' 的访问被拒绝(使用密码:YES)

(“SQLSTATE [HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:NO)”)

SQLSTATE[HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:YES)?

CPanel SQLSTATE[HY000] [1045] 拒绝用户访问

SQLSTATE[HY000] [1045] 使用 Docker 拒绝用户 'root'@'172.19.0.4' 的访问

QueryException SQLSTATE[HY000] [1045] 用户'homestead'@'localhost'的访问被拒绝(使用密码:YES)