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_USER
和MYSQL_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)