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

时间:2018-12-14 15:19:40

标签: mysql laravel docker

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

  

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

我在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中的root用户:

image

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

实际上,您不能在Docker的mymethod文件中创建def mymethod(self, *, arg1: Optional[int] = None, **kwargs) -> None: ... 用户。根用户默认情况下是创建的,如果要使用它,只需为其设置密码:mypy在laradock中。然后,如果您要创建另一个用户,请设置mymethodParent

因此在laradock / .env文件中:

root

现在,您可以在laravel项目中使用.env用户或MYSQL_ROOT_PASSWORD用户:

MYSQL_USER

请记住,要在laradock中连接到正确的数据库主机,应该在laravel中使用MYSQL_PASSWORD而不是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

root

答案 2 :(得分:0)

设法通过将我的.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 :(得分:0)

对我有好处:

rm -rf /root/.laradock

答案 4 :(得分:0)

如果您使用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;