簡體   English   中英

連接到 docker 上的 MySQL 容器時的 NodeJS ENOTFOUND db

[英]NodeJS ENOTFOUND db when connecting to MySQL container on docker

我正在嘗試使用 docker-compose 從本地主機上的 Node.js 連接到在 docker 上運行的 MySQL 實例。

Node.js 給我這個錯誤: ENOTFOUND db ,下面是完整的錯誤消息。

[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Application Name: RESTFull API - Development
Environment: development
Server is listening on port 3000
getaddrinfo ENOTFOUND db # <------------ Error here
[nodemon] app crashed - waiting for file changes before starting...

這是包含 MySQL 和管理員服務的 docker-compose.yml。

## docker-compose.yml
version: '3.8'

services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: 'nodejs-restfull-api-development'
    expose:
      - 3306
    volumes:
      - db-config:/etc/mysql
      - db-data:/var/lib/mysql

  adminer:
    image: adminer:latest
    depends_on:
      - db
    environment:
      ADMINER_DEFAULT_DB_DRIVER: mysql
      ADMINER_DEFAULT_DB_HOST: db
      ADMINER_DESIGN: nette
      ADMINER_PLUGINS: tables-filter tinymce
    ports:
      - "8080:8080"

volumes:
  db-config:
  db-data:

這是我的 node.js 數據庫連接配置。

const database = mysql.createConnection({
  host: 'db',
  user: config.get('db.user'),
  password: config.get('db.password'),
  database: config.get('db.database'),
  port: config.get('db.port'),
  connectTimeout: config.get('db.connectTimeout')
});

database.connect(err => {
  if (err) {
    console.log(err.message);
    process.exit(1);
  } else {
    console.log('Connected to database');
  }
});

您沒有告訴我們,但我假設您的 Node 應用程序在主機上運行,而不是在容器中運行? 如果是這種情況,那么您需要向主機公開 MySQL 端口,以便它可以訪問。 您還需要在配置中使用localhost作為主機名。

通過將 docker-compose 文件的數據庫部分更改為公開端口

  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: 'nodejs-restfull-api-development'
    ports:
      - 3306:3306
    volumes:
      - db-config:/etc/mysql
      - db-data:/var/lib/mysql

並將您的節點配置更改為

const database = mysql.createConnection({
  host: 'localhost',
  user: config.get('db.user'),
  password: config.get('db.password'),
  database: config.get('db.database'),
  port: config.get('db.port'),
  connectTimeout: config.get('db.connectTimeout')
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM