无法从宿主机连接无Root权限MariaDB Pod的问题
问题:宿主机无法连接Podman部署的MariaDB服务
使用以下mariadb-kube.yaml文件,通过podman play kube mariadb-kube.yaml部署MariaDB Pod:
apiVersion: v1 kind: Pod metadata: name: mariadb-pod labels: app: mariadb spec: containers: - name: test-mariadb image: mariadb:latest env: - name: MYSQL_ROOT_PASSWORD value: testpwd ports: - containerPort: 3306 - hostPort: 33066
容器内部连接正常:执行podman exec -it mariadb-pod-test-mariadb bash -c 'mariadb -h127.0.0.1 -uroot -p'可成功连接,用户信息和端口监听状态均正常:
MariaDB [(none)]> select user, host FROM mysql.user; +-------------+-----------+ | User | Host | +-------------+-----------+ | root | % | | healthcheck | 127.0.0.1 | | healthcheck | ::1 | | healthcheck | localhost | | mariadb.sys | localhost | | root | localhost | +-------------+-----------+
root@mariadb-pod:/# ss -tuln Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 0 0.0.0.0:3306 0.0.0.0:* tcp LISTEN 0 0 *:3306 *:*
nmap扫描确认宿主机33066端口已开放:
nmap -p 33066 127.0.0.1 Starting Nmap 7.92 ( https://nmap.org ) at 2024-10-08 05:13 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.00029s latency). PORT STATE SERVICE 33066/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 0.02 seconds
但宿主机执行mysql -vvv -h127.0.0.1 -uroot -P33066 -p连接时出错:
mysql -vvv -h127.0.0.1 -uroot -P33066 -p Enter password: ERROR 2013 (HY000): Lost connection to MySQL server at 'handshake: reading initial communication packet', system error: 11
解决方案
1. 修正端口映射配置(核心问题)
当前YAML里的ports字段写法错误,你将containerPort和hostPort拆成了两个独立的端口条目,导致Podman无法正确建立主机端口到容器端口的映射关系。正确写法是将两个字段放在同一个端口条目内:
ports: - containerPort: 3306 hostPort: 33066
修改后重新部署Pod:
podman play kube --replace mariadb-kube.yaml
2. 验证端口映射是否生效
重新部署后,执行podman port mariadb-pod查看映射情况,确认输出包含3306/tcp -> 0.0.0.0:33066(或类似绑定信息)。
3. 再次尝试连接
在宿主机重新执行连接命令:
mysql -vvv -h127.0.0.1 -uroot -P33066 -p
额外排查点(若上述步骤无效)
- 检查宿主机防火墙规则,确保33066端口允许本地连接
- 确认MariaDB配置文件(如
/etc/mariadb/mariadb.conf.d/50-server.cnf)中bind-address设置为0.0.0.0(容器内监听已正常,此步骤为兜底检查)
内容的提问来源于stack exchange,提问作者Wang
相关产品推荐
相关产品推荐

