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

Node.js本地可连MySQL容器,容器化运行时连接超时如何解决?

问题根因与解决方案

1. 代码硬编码错误(最直接触发原因)

应用源码中数据库连接配置存在语法错误,host字段的process.env.MYSQL_HOST_IP被双引号包裹,实际是把这段文本当成了数据库主机地址,没有读取环境变量的值。
修正后的代码片段:

var con = mysql.createConnection({
  host: process.env.MYSQL_HOST_IP,
  user: "user",
  password: "password",
  port: process.env.MYSQL_PORT
});

2. 服务未加入同一Docker网络

Docker Compose配置中仅app服务声明了加入app-tier网络,mysql_node服务未配置该网络声明,两个服务不在同一网络下无法互通。在mysql_node的配置中添加网络声明即可:

services: 
  mysql_node: 
    image: mysql:5.7
    restart: always
    networks:
      - app-tier # 新增该行配置
    environment: 
      MYSQL_DATABASE: 'sample_db' 
      MYSQL_USER: 'user' 
      MYSQL_PASSWORD: 'password' 
      MYSQL_ROOT_PASSWORD: 'password'
    ports: 
      - '3306:3306'
    expose: 
      - '3306' 
    volumes:
      - mysql_db:/var/lib/mysql

3. 服务启动时序问题

depends_on仅控制容器的启动顺序,不会等待MySQL进程完全初始化完成再启动应用。MySQL首次启动需要执行库表初始化逻辑,耗时较长,应用启动时MySQL还未就绪就会触发连接超时。可以通过两种方式解决:

  • 在app服务配置中添加restart: on-failure,启动失败自动重试,等待MySQL就绪后即可连接成功
  • 给应用添加启动前置检测,等待MySQL端口可访问后再启动Node进程

验证步骤

修改完成后执行以下命令重启服务即可:

docker-compose down -v # 清除旧的挂载卷,避免残留配置影响
docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:54:08