容器中启动的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 # 添加此行配置

浙公网安备 33010602011771号