不允许主机“ X”连接到该MySQL服务器

问题描述 投票:2回答:3

我想部署MySQL + PHPMyAdmin。我的docker-compose.yml:

version: "3"
services:
  db:
    image: mysql:5.7
    restart: always
    container_name: db
    volumes:
      - ./~mysql:/var/lib/mysql
      - ./mysql.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      MYSQL_DATABASE: "dbtest"
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_ROOT_HOST: "%"
    networks:
      - db
    command: --default-authentication-plugin=mysql_native_password
    healthcheck:
      test: "mysqladmin ping -h localhost"
      interval: 1s
      timeout: 1s
      retries: 60

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:4.7
    restart: always
    container_name: phpmyadmin
    ports:
      - 8080:80
    networks:
      - external-net
      - db
    environment:
      PMA_HOST: db
    depends_on:
      - db

networks:
  external-net:
    external:
      name: external-net
  db:
    driver: bridge

[一段时间后,我收到主题错误。 MYSQL_ROOT_HOST没有帮助。当我尝试从数据库容器连接到mysql时:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

我真的不知道该怎么做... Thx。

mysql docker docker-compose access
3个回答
2
投票

我重新创建了您的设置,只是添加了一些ENV配置来解决问题,我删除了卷部分,因为它没有问题:

docker-compose.yml

version: "3"
services:
  db:
    image: mysql:5.7
    restart: always
    container_name: db
    environment:
      - MYSQL_ROOT_PASSWORD=rootpasswd
      - MYSQL_DATABASE=phpmyadmin
      - MYSQL_USER=user
      - MYSQL_PASSWORD=userpasswd
    networks:
      - db
    command: --default-authentication-plugin=mysql_native_password
    healthcheck:
      test: "mysqladmin ping -h localhost"
      interval: 1s
      timeout: 1s
      retries: 60

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:4.7
    restart: always
    container_name: phpmyadmin
    ports:
      - 8080:80
    networks:
      - external-net
      - db
    environment:
      PMA_HOST: db
    depends_on:
      - db

networks:
  external-net:
    external:
      name: external-net
  db:
    driver: bridge

使用root:rootpasswd访问PHPMyadmin正常。


0
投票

如果本地系统上的文件是通过损坏的方式创建的,或者无法由Docker守护程序正确访问,则可能会出现此问题。这可能是由于以下原因:

  • Docker在Windows上缺少对本地硬盘驱动器的访问权限,例如C
  • 在构建容器时,Docker没有对本地硬盘驱动器的访问权限。即使Docker在第一个--build进程中要求允许在Windows上访问C时,这些文件仍可能已损坏。

解决方案可以是在授予对Docker的访问权限后删除相应的本地文件,在您的情况下,这些文件是/~mysqlmysql.cnf中的文件。


-1
投票

在Docker的常规设置中,启用不带TLS的守护程序。我认为它有效。

Docker image

© www.soinside.com 2019 - 2024. All rights reserved.