QNAP NAS中phpMyAdmin容器无法连接MySQL容器的问题求助
问题描述
QNAP NAS中运行的MySQL Docker容器配置:
- 容器IP:10.0.3.3
- root密码:root
- 端口转发:宿主机32774 → 容器33060/TCP
创建phpMyAdmin容器时设置参数:
- PMA_HOST:10.0.3.3
- PMA_PORT:33060
- PMA_USER:root
- PMA_PASSWORD:root
加载phpMyAdmin时出现错误:
Cannot connect: invalid settings.
mysqli::real_connect(): Premature end of data (mysqlnd_wireprotocol.c:387)
mysqli::real_connect(): GREET packet 4 bytes shorter than expected
mysqli::real_connect(): Error while reading greeting packet. PID=30
mysqli::real_connect(): (HY000/2002): Unknown error while trying to connect via tcp://10.0.3.3:33060
phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection. You should check the host, username and password in your configuration and make sure that they correspond to the information given by the administrator of the MySQL server.
排查与解决步骤
1. 确认MySQL容器的实际监听端口
你设置的端口转发是宿主机32774映射到容器33060,但首先要确认MySQL容器内部的服务确实在33060端口监听:
- 进入MySQL容器执行命令:
netstat -tulpn | grep mysqld - 如果输出显示MySQL监听的是默认3306端口,说明你映射端口时写错了,此时phpMyAdmin应该设置
PMA_PORT=3306,而非33060。
2. 检查MySQL用户权限
默认情况下MySQL的root用户只允许本地连接,需要授权允许从phpMyAdmin容器所在IP访问:
- 进入MySQL容器,登录MySQL:
mysql -uroot -proot - 执行授权命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES; - 注:
%代表允许所有IP连接,若要更安全可指定phpMyAdmin容器的具体IP。
3. 确保两个容器在同一Docker网络
如果phpMyAdmin和MySQL容器不在同一个Docker网络,即使知道IP也可能出现连接异常:
- 在QNAP的Container Station中查看两个容器的网络配置,确保它们使用相同的自定义网络(默认bridge网络也能通,但自定义网络更稳定)。
4. 验证端口连通性
在phpMyAdmin容器内测试能否连通MySQL容器的端口:
- 进入phpMyAdmin容器执行:
telnet 10.0.3.3 33060(替换为实际监听的端口) - 如果无法连通,说明端口配置错误或防火墙/安全组限制了访问。
内容的提问来源于stack exchange,提问作者Steve

