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

使用Docker部署NodeJS时连接MySQL报错的求助

解决Docker容器中NodeJS连接MySQL被拒绝的问题

问题根源

容器内的localhost指向容器自身,而非宿主机或其他容器,导致NodeJS无法连接到外部的MySQL服务。

解决方案1:用Docker网络连接MySQL容器(推荐,若MySQL也用Docker运行)

  1. 创建自定义Docker网络
docker network create app-network
  1. 启动MySQL容器并加入该网络
docker run -d \
  --name mysql-db \
  --network app-network \
  -e MYSQL_ROOT_PASSWORD=ilovestackoverflow \
  -e MYSQL_DATABASE=db830 \
  mysql:latest
  1. 修改NodeJS数据库连接配置,将host改为MySQL容器名mysql-db
const con = mysql.createConnection({
  host: "mysql-db",
  user: "root",
  password: "ilovestackoverflow",
  database: "db830",
  port: "3306"
});
  1. 重新构建镜像并启动NodeJS容器,加入同一网络
docker build -t help:help .
docker run -p 3000:3000 \
  --name node-app \
  --network app-network \
  help:help

解决方案2:连接宿主机上的MySQL

  1. 找到宿主机的IP地址:

    • Linux:执行ip addr show docker0查看网关地址
    • Windows/macOS:执行docker inspect bridge查找Gateway字段值
  2. 修改NodeJS连接配置的host为宿主机IP

const con = mysql.createConnection({
  host: "192.168.1.100", // 替换为你的宿主机IP
  user: "root",
  password: "ilovestackoverflow",
  database: "db830",
  port: "3306"
});
  1. 确保宿主机MySQL允许外部连接:
    • 修改MySQL配置文件(如my.cnf或my.ini),将bind-address设为0.0.0.0
    • 重启MySQL服务

解决方案3:使用Docker Compose(一键管理多服务)

创建docker-compose.yml文件:

version: '3.8'
services:
  node-app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - mysql-db
    networks:
      - app-network

  mysql-db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ilovestackoverflow
      MYSQL_DATABASE: db830
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

修改NodeJS连接配置的host为mysql-db,然后执行命令启动所有服务:

docker-compose up --build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:06:32