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

Node.js连接Lando MySQL失败求助:非Node项目可正常连接

Node.js连接Lando MySQL失败排查请求

我在尝试将Node.js连接到Lando运行的MySQL数据库时遇到问题:数据库已正常启动,非Node.js项目均可正常连接,但Node.js连接失败。已尝试将host设为'database'、'localhost'和'internal'均无效,当前使用Node.js v18.19.0、npm v10.2.3。以下是相关代码、配置及报错信息,求排查原因:

Node.js连接代码

const express = require('express');

const app = express();
const cors = require('cors');

const mysql = require('mysql');

app.use(cors());

const db = mysql.createConnection({
    host: 'database',
    user: 'lemp',
    password: 'lemp',
    database: 'lemp',
    port: 3306
});

Lando配置

services:
  database:
    type: mysql
    creds:
      username: lemp
      password: lemp

数据库终端信息

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| lemp               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use lemp
Database changed

报错信息

$ node index.js
Server listening on port 8080
/home/maarten/www/react/test/server/index.js:19
    if (err) throw err;
             ^

Error: getaddrinfo EAI_AGAIN database
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
    --------------------
    at Protocol._enqueue (/home/maarten/www/react/test/server/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/home/maarten/www/react/test/server/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/home/maarten/www/react/test/server/node_modules/mysql/lib/Connection.js:116:18)
    at Object.<anonymous> (/home/maarten/www/react/test/server/index.js:18:4)
    at Module._compile (node:internal/modules/cjs/loader:1356:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1414:10)
    at Module.load (node:internal/modules/cjs/loader:1197:32)
    at Module._load (node:internal/modules/cjs/loader:1013:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:128:12)
    at node:internal/main/run_main_module:28:49 {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'database',
  fatal: true
}

Node.js v18.19.0

排查方案

  • 确认Node服务运行环境:如果Node.js是本地直接启动(非Lando服务),则无法通过'database'内部主机名访问,需用localhost+Lando暴露的外部端口(执行lando info查看database服务的external_connection.port)。
  • 检查容器网络连通性:若Node是Lando服务,通过lando ssh进入Node容器,执行ping database验证主机解析,无效则重启Lando(lando restart)。
  • 替换数据库包:旧mysql包与Node.js v18+可能存在兼容性问题,安装mysql2并替换代码中的require('mysql')为require('mysql2')。
  • 校验用户访问权限:进入数据库终端执行SELECT host, user FROM mysql.user WHERE user='lemp';,若host非%,执行以下命令开放权限:
    ALTER USER 'lemp'@'%' IDENTIFIED BY 'lemp';
    FLUSH PRIVILEGES;
    
  • 核对Lando服务配置:执行lando info,确认database服务的internal_connection参数(host、port、账号密码)与Node代码完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:45:55