我正在尝试通过 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/