我正在嘗試使用 docker-compose 從 Localhost 上的 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');
}
});
uj5u.com熱心網友回復:
您沒有告訴我們,但我假設您的 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')
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460615.html
標籤:javascript mysql 节点.js 码头工人 码头工人撰写
上一篇:通過Gorm查詢模型
