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

CentOS 8下Podman部署Node应用遇curl连接重置问题求助

解决思路与排查步骤

我之前在CentOS 8上用Podman部署Node应用时也碰到过类似的连接重置问题,结合你的描述,大概率是容器内的服务没有真正启动起来,给你梳理几个排查和解决的关键点:

1. 核心问题:Dockerfile的CMD命令未正确启动Web应用

你的Dockerfile最后一行是CMD ["node"],这个命令只会启动Node的交互式REPL环境,并没有执行你的Web应用入口文件(比如app.js、server.js这类启动服务的脚本)。而你本地用nodemon运行时,应该是指定了入口文件(比如nodemon server.js),所以能正常监听端口,但容器里只是跑了个Node shell,根本没有启动服务进程,自然无法响应外部请求。

解决方法:

  • 修改Dockerfile的CMD命令,指向你的应用入口文件,比如:
    CMD ["node", "server.js"]
    
  • 如果你在package.json里配置了start脚本(比如"start": "node server.js"),也可以改成:
    CMD ["npm", "start"]
    

修改后重新构建镜像:podman build -t webiapp .,再重新启动容器试试。

2. 验证容器内的端口监听状态

如果不确定容器里有没有进程监听3050端口,可以进入容器检查:

  • 执行命令进入容器:
    podman exec -it 593b1746b57c bash
    
  • 在容器内安装网络工具(如果没有的话):
    yum install -y net-tools
    
  • 查看端口监听情况:
    netstat -tulpn | grep 3050
    
    或者用更轻量的ss命令:
    ss -tulpn | grep 3050
    

如果没有任何输出,说明确实没有进程监听3050,坐实了CMD命令的问题。

3. 排查本地端口占用问题

你本地用nodemon运行时提示EADDRINUSE,说明3050端口被占用,但要确认是不是Podman容器在占用:

  • 执行命令查看本地端口占用:
    ss -tulpn | grep 3050
    

如果输出里的进程是Podman相关的,那说明容器确实绑定了端口,但服务没启动;如果是nodemon或者其他进程,那先把这些进程杀掉,再重新启动容器测试。

4. 排查Podman网络模式(备选)

CentOS 8上Podman默认使用slirp4netns网络模式,极少数情况下会出现端口转发异常。如果前面的步骤都没问题,可以试试用主机网络启动容器,绕过端口映射:

podman run -dt --network host webiapp

然后再访问localhost:3050,如果能正常访问,说明是端口映射的问题,可以进一步排查Podman的网络配置,但这个情况概率很低,优先解决前面的CMD问题。


内容的提问来源于stack exchange,提问作者SeaDog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:24:57