Node.js拒绝使用knex连接MySQL Docker容器



我正在尝试使用docker和MySQL构建应用程序,但我无法通过Node.js连接到MySQL容器。我不知道是否使用knex导致了这个错误,但是错误是ECONNREFUSED。

{
"errno": -111,
"code": "ECONNREFUSED",
"syscall": "connect",
"address": "127.0.0.1",
"port": 3306,
"fatal": true
}

Docker.compose.yaml

version: "3.8"
services: 
app:
build: 
context: .
dockerfile: Dockerfile
ports: 
- 3000:3000
volumes: 
- .:/app
- /app/node_modules

mysql_server:
image: mysql:8.0
ports:
- 3307:3306
environment: 
- MYSQL_DATABASE=transaction_app
- MYSQL_ROOT_PASSWORD=root

Knex连接
const db= knex ({
client: 'mysql2',
connection: {
host: '127.0.0.1',
port: 3306,
user: 'root',
password: '',
database: 'transaction_app'
}
});

连接时需要使用mysql_server作为主机名。在容器中,localhost127.0.0.1是指容器本身。

这样的

const db= knex ({
client: 'mysql2',
connection: {
host: 'mysql_server',
port: 3306,
user: 'root',
password: '',
database: 'transaction_app'
}
});

更多信息在这里。