You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从宿主机连接无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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:47:25