连接到mysql容器时如何修复“Access denied for user 'root'@'172.22.0.4' (using password: YES)”的问题?

5
我正在docker容器中创建一个laravel项目,并包括MySQL和phpmyadmin,但是在尝试迁移(或从phpmyadmin访问数据库)时,我遇到了拒绝访问的错误。我已经尝试了一些Stack Overflow的解决方案,但都不起作用,也尝试过GitHub问题中的解决方案。以下是我的docker-compose.yml文件。
version: "3"

services:
  web:
    container_name: ${APP_NAME}_web
    build:
      context: ./docker/web
    ports:
      - 9000:80
    volumes:
      - ./:/var/www/app
    networks:
      - mynet
  db:
    image: mysql:5.7
    container_name: db
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: laracocodb
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - mysqldata:/var/lib/mysql/
    networks:
      - mynet

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpma
    links:
      - db:db
    ports:
      - 9191:80
    environment:
      MYSQL_USERNAME: root
      MYSQL_ROOT_PASSWORD: root
      PMA_HOST: db
    networks:
      - mynet
networks:
  mynet:
    driver: bridge
volumes:
  mysqldata:
    driver: local

无论我从数据库容器的BASH、PHPMyAdmin首页还是尝试迁移数据库时访问Web服务,错误总是“访问被拒绝”。

我对Docker不是很了解,但有时(取决于托管服务),您可能需要将调用者的IP地址添加到远程MySQL访问列表中。 - Arthur Hylton
你能解释得更详细一些吗? - joe_inz
https://dev.mysql.com/doc/refman/8.0/en/adding-users.html - Lightness Races in Orbit
我认为那不是解决方案,因为要创建一个账户或用户,你应该先登录MySQL,但是这被拒绝了。我读到过,在docker中创建MySQL服务并在docker-compose文件中指定环境变量的凭据时,它们将与该服务配置,并可以在容器内使用。 - joe_inz
@joe_inz 我的意思是,在托管帐户软件中(通常对我来说是 cPanel),有一个名为“远程 MySQL [something...]”的部分,需要您添加(白名单)任何将请求登录访问任何 mySQL 数据库的服务器或计算机的 IP 地址。 - Arthur Hylton
这与Docker容器有什么关系?我没有使用任何托管服务...这是本地的! - joe_inz
1个回答

3
我也遇到过这个问题很多次,MySQL默认允许用户localhost访问root,这意味着即使你已经打开了3306:3306端口,你仍然需要添加用户。
按照以下命令操作,错误将得到解决!

https://dev59.com/gWgu5IYBdhLWcg3wln8O#11225588


1
你是否曾经在 Docker 容器中使用 MySQL? - joe_inz
是的。我在 Docker 容器中使用 MySQL。如果您需要自动化,我有一个单独的 Dockerfile 可供使用。 - Geet Choubey
可以提供MySQL容器的Docker文件吗?我对Docker还比较陌生。 - joe_inz
1
我已经通过新的Docker Compose配置解决了问题,原来旧的配置没有在创建MySQL容器时创建用户root和环境变量,这就是为什么我甚至无法使用root登录。不管怎样,你的回答确实帮了我,所以我会将其标记为最佳答案,谢谢。 - joe_inz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接