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

时间:2019-01-03 22:09:32

标签: mysql docker docker-compose access

我想部署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没有帮助。当我尝试从db-container连接到mysql时:

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

我重新创建了设置,只是添加了一些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可以正常工作。

答案 2 :(得分:0)

出于某种原因,在卷路径为我解决问题之前使用了“~”。

Overlap

将此代码更改为

  volumes:
  - ./~mysql:/var/lib/mysql
  - ./mysql.cnf:/etc/mysql/conf.d/my.cnf

用于 MySQL 容器。

答案 3 :(得分:-2)

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

Docker image