使用Podman部署MySQL后无法连接:ECONNREFUSED错误求助
问题
使用Podman托管MySQL Server,执行以下命令创建容器:
podman run --name techBlog -e MYSQL_ROOT_PASSWORD='my-password' -e MYSQL_DATABASE='blog_db' -d mysql:latest
运行server.js脚本时出现连接拒绝错误:
original: Error: connect ECONNREFUSED ::1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: '::1', port: 3306, fatal: true }
已确认数据库名称、密码和端口正确,直接安装MySQL时代码可正常运行,改用Podman后无法连接,期望实现server.js与Podman容器内MySQL的正常连接。
解决方案
1. 添加端口映射(核心问题)
Podman容器默认采用隔离网络,本地无法直接访问容器内的3306端口,需在创建容器时添加端口映射参数:
podman run --name techBlog -e MYSQL_ROOT_PASSWORD='my-password' -e MYSQL_DATABASE='blog_db' -p 3306:3306 -d mysql:latest
-p 3306:3306:将本地3306端口映射到容器内的3306端口- 若本地3306端口被占用,可替换为其他端口(如
-p 3307:3306),同时修改server.js中的连接端口为3307
2. 调整数据库连接地址
错误显示连接的是::1(IPv6本地地址),部分场景下容器内MySQL仅监听IPv4地址,建议在server.js中将连接地址改为127.0.0.1:
// 示例连接配置 const db = mysql.createConnection({ host: '127.0.0.1', // 替换原有的localhost或::1 user: 'root', password: 'my-password', database: 'blog_db', port: 3306 });
3. 确认MySQL容器正常启动
执行以下命令查看容器日志,验证MySQL已完成初始化并处于运行状态:
podman logs techBlog
日志中出现ready for connections字样,说明容器内MySQL已正常启动。
4. 授权远程访问权限(可选)
MySQL的root用户默认仅允许容器内本地访问,若需要外部连接,需进入容器执行授权操作:
# 进入容器 podman exec -it techBlog mysql -uroot -p'my-password' # 执行授权命令 GRANT ALL ON blog_db.* TO 'root'@'%' IDENTIFIED BY 'my-password'; FLUSH PRIVILEGES;
'%'表示允许从任何地址连接,也可指定具体IP段缩小访问范围
内容的提问来源于stack exchange,提问作者S-coding
相关产品推荐
相关产品推荐

