Loading

容器中启动的MySQL,使用 localhost 连接时报:Unknown error 1045

容器中启动的MySQL,使用 localhost 连接时报:Unknown error 1045

services:
  mysql8:
    image: mysql:8.4
    container_name: mysql8
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: mypassword
    ports:
      - 3306:3306
    volumes:
    - /var/lib/mysql8/conf.d:/etc/mysql/conf.d
    - /var/lib/mysql8/data:/var/lib/mysql

使用 localhost 连接时遇到:

SQLSTATE[HY000] [1045] Unknown error 1045 (Connection: mysql8, SQL: show tables)

localhost 默认使用 Unix Socket
当使用 localhost 作为主机时,默认会尝试通过 Unix 套接字(Unix Socket) 连接(如 /var/run/mysqld/mysqld.sock)。然而,Docker 容器中的 MySQL 套接字文件通常位于容器内部,宿主机无法直接访问,因此连接失败。

当使用 127.0.0.1 作为主机时,客户端会强制通过 TCP/IP 协议 连接,此时依赖 Docker 的端口映射。

或者通过挂载的方式,将套接字文件映射出来:

services:
  mysql8:
    image: mysql:8.4
    container_name: mysql8
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: mypassword
    ports:
      - 3306:3306
    volumes:
    - /var/lib/mysql8/conf.d:/etc/mysql/conf.d
    - /var/lib/mysql8/data:/var/lib/mysql
	- /run/mysqld:/run/mysqld # 添加此行配置

posted @ 2025-05-29 09:07  zhpj  阅读(42)  评论(0)    收藏  举报