我正在尝试使用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
作为主机名。在容器中,localhost
和127.0.0.1
是指容器本身。
这样的
const db= knex ({
client: 'mysql2',
connection: {
host: 'mysql_server',
port: 3306,
user: 'root',
password: '',
database: 'transaction_app'
}
});
更多信息在这里。