gpt4 book ai didi

node.js - Docker - SequelizeConnectionRefusedError : connect ECONNREFUSED 127. 0.0.1:3306

转载 作者:行者123 更新时间:2023-12-02 17:39:59 27 4
gpt4 key购买 nike

我正在尝试使用 docker 容器启动并运行我的 nodejs 应用程序。我不知道可能有什么问题。当我使用控制台调试凭据时,凭据似乎已正确传递。同时启动 sequel pro 并使用相同的用户名和密码直接连接似乎有效。当 Node 在容器中启动时,我收到错误消息:

SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306



应用程序本身在端口 3000 上正确加载,但是没有从数据库中检索到数据。如果还尝试将环境变量直接添加到 docker compose 文件中,但这似乎也不起作用。

我的项目代码托管在这里: https://github.com/pietheinstrengholt/rssmonster

使用以下 database.js 配置。当我添加 console.log(config) 时,会显示 .env 文件中的正确凭据。
require('dotenv').load();

const Sequelize = require('sequelize');
const fs = require('fs');
const path = require('path');
const env = process.env.NODE_ENV || 'development';
const config = require(path.join(__dirname + '/../config/config.js'))[env];

if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
var sequelize = new Sequelize(config.database, config.username, config.password, config);
}

module.exports = sequelize;

当我在 database.js 中执行 console.log(config) 时,我得到以下输出:
{
username: 'rssmonster',
password: 'password',
database: 'rssmonster',
host: 'localhost',
dialect: 'mysql'
}

以下.env:
DB_HOSTNAME=localhost
DB_PORT=3306
DB_DATABASE=rssmonster
DB_USERNAME=rssmonster
DB_PASSWORD=password

以及以下 docker-compose.yml:
version: '2.3'
services:

app:
depends_on:
mysql:
condition: service_healthy
build:
context: ./
dockerfile: app.dockerfile
image: rssmonster/app
ports:
- 3000:3000
environment:
NODE_ENV: development
PORT: 3000
DB_USERNAME: rssmonster
DB_PASSWORD: password
DB_DATABASE: rssmonster
DB_HOSTNAME: localhost
working_dir: /usr/local/rssmonster/server
env_file:
- ./server/.env
links:
- mysql:mysql

mysql:
container_name: mysqldb
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_DATABASE: "rssmonster"
MYSQL_USER: "rssmonster"
MYSQL_PASSWORD: "password"
ports:
- "3307:3306"
volumes:
- /var/lib/mysql
restart: unless-stopped
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 5s
retries: 10

volumes:
dbdata:

错误输出:
{ SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306
app_1 | at Promise.tap.then.catch.err (/usr/local/rssmonster/server/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:128:19)
app_1 | From previous event:
app_1 | at ConnectionManager.connect (/usr/local/rssmonster/server/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:125:13)
app_1 | at sequelize.runHooks.then (/usr/local/rssmonster/server/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:306:50)
app_1 | From previous event:
app_1 | at ConnectionManager._connect (/usr/local/rssmonster/server/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:306:8)
app_1 | at ConnectionManager.getConnection (/usr/local/rssmonster/server/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:247:46)
app_1 | at Promise.try (/usr/local/rssmonster/server/node_modules/sequelize/lib/sequelize.js:564:34)
app_1 | From previous event:
app_1 | at Promise.resolve.retryParameters (/usr/local/rssmonster/server/node_modules/sequelize/lib/sequelize.js:464:64)
app_1 | at /usr/local/rssmonster/server/node_modules/retry-as-promised/index.js:60:21
app_1 | at new Promise (<anonymous>)

最佳答案

代替localhost指向mysql这是 nodejs 将解析到 MySQL 容器的服务名称 (DNS):

DB_HOSTNAME: mysql


 {
...
host: 'mysql',
...
}

关于node.js - Docker - SequelizeConnectionRefusedError : connect ECONNREFUSED 127. 0.0.1:3306,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53988649/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com