Sequelize.authenticate()对于Docker内的谷歌云sql连接不起作用(没有成功或错误响应)



我正在用typescript、express和Sequelize构建api服务器。

这是我的database连接类。

export class Database {
private _sequelize: Sequelize;
private config: DBConfigGroup = dbConfig;
private env = process.env.NODE_ENV as string;
constructor() {
this._sequelize = new Sequelize({
dialect: 'postgres',
database: this.config[this.env].database,
username: this.config[this.env].username,
password: this.config[this.env].password,
host: this.config[this.env].host,
});
}
async connect(): Promise<void> {
try {
console.log('start connect');
await this._sequelize.authenticate();
console.log('Connection has been established successfully.'.green.bold);
} catch (error) {
console.error('Unable to connect to the database:'.red.bold, error);
}
}
async close(): Promise<void> {
try {
await this._sequelize.close();
console.log('Connection has been close successfully.'.red.bold);
} catch (error) {
console.error('Unable to close to the database:'.yellow.bold, error);
}
}
get sequelize(): Sequelize {
return this._sequelize;
}
}

所以在我的server.ts中,我称之为

dotenv.config({
path: './config/environments/config.env',
});
const database = new Database();
console.log('Init db');
database
.connect()
.then(() => {
console.log('success db ininit');
})
.catch((err) => {
console.log('fail db init: ', err);
}); 
/**
* Server Activation
*/
const server = app.listen(PORT, () => {
console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold);
});

所以在我的本地开发中一切都很好

但是当我尝试用docker compose和这个配置运行它时

// docker-compose.yml
version: '3.4'
services:
api:
stdin_open: true
tty: true
build:
context: ./api
dockerfile: Dockerfile.dev
ports:
- "5000:5000"
volumes:
- /app/node_modules
- ./api:/app

这是我的Dockerfile.dev文件

FROM node:alpine
ENV NODE_ENV=development
WORKDIR /app
EXPOSE 5000
COPY package.json package-lock.json* ./ 
RUN npm install && npm cache clean --force
COPY . .
CMD ["npm", "run", "dev:docker"]

但问题是当我运行docker-compose up --build

我只看到这些日志

api_1  | Init db
api_1  | start connect
api_1  | Server running in development mode on port 5000

所以基本上无论CCD_ 7是成功还是失败都没有响应,只是Server running in development mode on port 5000注销,什么都没有。

为什么它不能像在本地一样在docker中工作,我错过了任何配置?

感谢

您可以尝试node:10版本我也有同样的问题,但当将图像更改为节点10时,这个问题就消失了希望能帮助你

最新的节点版本v14.15.5现在为这个问题抛出了一个错误。它指示在本地安装pg

/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:81
throw new Error(`Please install ${moduleName} package manually`);
^

错误:请手动安装pg包

我做到了,并在我的机器上解决了问题。

相关内容

  • 没有找到相关文章

最新更新