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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:42:02