当你在 Docker Desktop 中部署 MySQL 后遇到客户端连接问题,通常是由于端口未正确暴露导致的。以下是详细的解决方案:
在运行 MySQL 容器时,必须将容器内的 3306 端口映射到主机的端口:
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-p 3306:3306
表示将容器内的 3306 端口映射到主机的 3306 端口-p 3307:3306
等查看容器端口映射情况:
docker port some-mysql
或查看详细信息:
docker inspect some-mysql
即使端口正确映射,MySQL 用户可能没有远程访问权限:
# 进入容器
docker exec -it some-mysql mysql -uroot -p
# 在 MySQL 中执行
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
确保主机防火墙允许 Docker 端口通信:
sudo ufw allow 3306
host.docker.internal
而不是 localhost
docker inspect
获取)某些 MySQL 镜像默认只监听本地连接,可以创建自定义配置文件:
# 创建自定义配置文件 my.cnf
[mysqld]
bind-address = 0.0.0.0
# 运行容器时挂载配置文件
docker run --name some-mysql -v /path/to/my.cnf:/etc/mysql/conf.d/my.cnf -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker ps
mysql -h 127.0.0.1 -P 3306 -u root -p
通过以上步骤,应该能够解决 Docker Desktop 中 MySQL 端口未暴露导致的连接问题。