node.js - Sequelize.authenticate() 对 Docker 内的谷歌云 sql 连接不起作用(没有成功或错误响应)
问题描述
我正在使用 typescript、express 和Sequelize
.
这是我的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
所以无论sequelize.authenticate()
成功还是失败基本上都没有反应,只是Server running in development mode on port 5000
注销,毕竟什么都没有。
为什么它不能像在本地一样在 docker 内部工作,我错过的任何配置?
谢谢
解决方案
您可以尝试 node:10 版本 我也有同样的问题,但是当将图像更改为 node:10 时,该问题就消失了 希望对您有所帮助
推荐阅读
- python - 在 jupyter notebook 中切换环境的问题(无论是打开的还是新的)
- oracle-apex - Oracle APEX 20.2 选择列表下拉值出现在另一台显示器上,而不是 Edge 或 Chrome 中的选择列表附近好吗?
- winforms - 检查应用程序是否允许通知
- python - 如何将类型的 `__init__` 或 `__new__` 绑定到其他类实例?
- mysql - Windows 机器上的 MySQL Server 8.0,阻止名称解析
- java - 优先队列
> 不接受来自我的地图的条目对象 - javascript - 尝试从 JSON 追加获取数据
- c# - C#中的石头、纸、剪刀
- java - 未解决的要求:导入包:com.google.common.base
- python-3.x - GetObject 操作:尝试使用 boto 读取 S3 存储桶中的文件时拒绝访问