在 Mac 上使用 Docker Desktop 部署 MySQL 服务后,本地客户端连接失败可能有以下几种原因:
docker ps -a
确保 MySQL 容器状态为 "Up"。如果未运行,启动容器:
docker start [容器名或ID]
检查 Docker 运行命令或 compose 文件中的端口映射配置:
docker inspect [容器名或ID] | grep HostPort
典型 MySQL 端口映射应为 3306:3306
。
进入容器并检查用户权限:
docker exec -it [容器名或ID] mysql -uroot -p
然后执行:
SELECT host, user FROM mysql.user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
确保 MySQL 配置允许远程连接:
docker exec -it [容器名或ID] bash
cat /etc/mysql/my.cnf
查找 bind-address
参数,确保设置为 0.0.0.0
或注释掉。
docker exec -it [容器名或ID] mysql -uroot -p
如果能连接,说明容器内 MySQL 服务正常。
docker network inspect bridge
确保容器使用正确的网络。
如果问题持续,尝试重新创建容器:
docker stop [容器名或ID]
docker rm [容器名或ID]
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:latest
version: '3.8'
services:
mysql:
image: mysql:latest
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: userpassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
restart: always
command: --default-authentication-plugin=mysql_native_password
volumes:
mysql_data:
使用本地 MySQL 客户端连接:
mysql -h 127.0.0.1 -P 3306 -u root -p
或使用 GUI 工具(如 TablePlus、DBeaver)连接 localhost:3306
。
mysql:5.7
如果问题仍未解决,请提供具体的错误信息以便进一步诊断。