mysql - TCPConnectWrap.afterConnect - Node 在 docker compose 中时无法从 mysql 获取数据

标签 mysql node.js docker docker-compose

我正在尝试通过 dokcer-compose 将 Node 与 mysql 连接。我可以使用工作台访问 mysql,但是当我尝试连接 Node 时出现错误:

Error: connect ECONNREFUSED 127.0.0.1:3306
     at TCPConnectWrap.afterConnect [as oncomplete] (net.js: 1054: 14))

有谁知道这是怎么回事吗?

docker-compose.yml

version: '3'

services:

  #App Service
  app:
    image: "node:alpine"
    container_name: cms-node
    restart: unless-stopped
    tty: true
    working_dir: /app
    environment:
      - NODE_ENV=production
    ports:
      - 1234:1234
    volumes:
      - ./:/app
    links:
      - db
    depends_on:
      - db

  #Mysql Service
  db:
    image: mysql:latest
    container_name: cms-mysql
    restart: unless-stopped
    # command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_DATABASE: CMS
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306

Node 创建连接

const db: Connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'CMS',
});

export default db;

Node 尝试连接

db.connect((err) => {
            if (err) {
                throw err;
            }
            console.log('Connected!');
        });

最佳答案

您应该使用链接名称(默认情况下,链接服务的名称)作为要连接的主机名。请参阅docker-compose.yml有关详细信息的文档。

因此只需使用 host: 'db' 而不是 host: 'localhost'

关于mysql - TCPConnectWrap.afterConnect - Node 在 docker compose 中时无法从 mysql 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56330860/

相关文章:

javascript - Mongoose 唯一索引不起作用

php - Docker 容器中的 SSH 导致 HTTP 404

docker - 使用 docker-compose 运行 neo4j - neo4j 无法从本地主机访问 :7474

linux - 无法在 Ubuntu 16.04.2 LTS 上启动 docker(初始化 graphdriver 时出错)

php - Mysql查询查找2列的最小值和最大值,其中1列的最小值不能等于零

php - 访问由 while 循环生成的特殊 div

mysql - 无法添加或更新子行 : a foreign key constraint fails

java.sql.SQLException : Access denied for user 'root' @'localhost' - Can't create connection with mysql

node.js - 如何提高ArangoDB在负载(多个并发查询)下的性能?

javascript - 有人可以 ELI5 如何使用 node.js 正确地进行离线 Google oauth2 吗?