【问题标题】: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?

标签: mysql laravel docker


【解决方案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 中

          【讨论】:

            猜你喜欢
            • 2018-07-22
            • 2021-02-27
            • 2019-12-01
            • 1970-01-01
            • 2020-01-16
            • 2020-08-20
            • 2018-10-08
            • 1970-01-01
            相关资源
            最近更新 更多