Podman无root容器部署WordPress数据库连接故障排查求助
排查思路与解决方案
1. 修正环境变量拼写错误(最优先)
你的WordPress启动命令中存在拼写错误:WORDPRESS_DB_PASWORD少了一个字母s,正确变量名应为WORDPRESS_DB_PASSWORD。这个错误会导致WordPress无法读取正确的数据库密码,直接引发连接失败。
修正后的WordPress启动命令:
podman run --detach --pod myblog \ -e WORDPRESS_DB_HOST=mywpdb:3306 \ -e WORDPRESS_DB_NAME=mywpdb \ -e WORDPRESS_DB_USER=mywpuser \ -e WORDPRESS_DB_PASSWORD=1234 \ --name mywp docker.io/library/wordpress:6.0
2. 验证Pod内网络连通性
同一Pod内的容器共享网络命名空间,需确认WordPress容器能正常访问数据库容器的3306端口:
- 进入WordPress容器测试连通性:
podman exec -it mywp ping mywpdb podman exec -it mywp nc -zv mywpdb 3306
如果ping不通或端口未开放,检查Pod的网络配置是否正常,或重启Pod:podman pod restart myblog
3. 调整数据库用户权限
从Mariadb日志的Access denied for user 'mywpuser'@'10.0.2.100'可以看出,数据库用户mywpuser仅允许localhost访问,而WordPress容器来自Pod内的其他IP段。需修改用户权限允许远程(Pod内)访问:
- 进入数据库容器执行SQL:
在MySQL/Mariadb命令行中执行:podman exec -it mywpdb mysql -uroot -p1234
(GRANT ALL PRIVILEGES ON mywpdb.* TO 'mywpuser'@'%' IDENTIFIED BY '1234'; FLUSH PRIVILEGES;%表示允许任意IP访问,测试环境适用,生产环境建议限制为Pod所在子网)
4. 确保数据库服务完全就绪
数据库容器启动后需要一定时间完成初始化,若WordPress启动过早会导致连接失败:
- 先启动数据库容器,等待30秒后再启动WordPress容器;
- 或给WordPress容器添加自动重启策略,让它在连接失败后重试:
podman run --detach --pod myblog --restart on-failure:5 \ # 其他环境变量... --name mywp docker.io/library/wordpress:6.0
5. 检查无root Podman的权限限制
Ubuntu 22.04的无root Podman可能受AppArmor/SELinux限制,导致容器间网络或文件访问异常:
- 临时关闭AppArmor对Podman的限制测试:
sudo aa-complain /usr/bin/podman - 若问题解决,可调整AppArmor规则或使用
--security-opt apparmor=unconfined启动容器(仅测试环境使用)
6. 查看详细日志定位问题
- 查看数据库容器初始化日志,确认数据库和用户是否创建成功:
podman logs mywpdb - 查看WordPress容器日志,获取更详细的连接错误信息:
podman logs mywp
内容的提问来源于stack exchange,提问作者Pierwiastek
相关产品推荐
相关产品推荐

