Nestjs/TypeORM 无法连接到 Docker MariaDB

Nestjs/TypeORM Cannot connect to Docker MariaDB

每当我 运行 我的 docker 包含 nodejs 11.10 和 mariadb 的图像时,我都会收到以下错误:

[Nest] 16 - 3/12/2019, 11:24:02 AM [TypeOrmModule] Unable to connect to the database. Retrying (9)... +3587msError: EPERM: operation not permitted, scandir '/proc/1/map_files/559e63542000-559e656d1000' at Object.readdirSync (fs.js:807:3) at GlobSync._readdir (/app/node_modules/glob/sync.js:288:41) at GlobSync._readdirInGlobStar (/app/node_modules/glob/sync.js:267:20) at GlobSync._readdir (/app/node_modules/glob/sync.js:276:17) at GlobSync._processReaddir (/app/node_modules/glob/sync.js:137:22) at GlobSync._process (/app/node_modules/glob/sync.js:132:10) at GlobSync._processGlobStar (/app/node_modules/glob/sync.js:380:10) at GlobSync._process (/app/node_modules/glob/sync.js:130:10) at GlobSync._processGlobStar (/app/node_modules/glob/sync.js:383:10) at GlobSync._process (/app/node_modules/glob/sync.js:130:10)

当我使用 mysql:latestmysql:5.6 时,同样的问题发生了。这是我的连接:

TypeOrmModule.forRoot({
  type: 'mariadb',
  host: '172.17.0.1',
  port: 3306,
  username: 'nest',
  password: 'secret',
  database: 'nest',
  entities: [__dirname + '/**/*.entity{.ts,.js}'],
  synchronize: true,
}),

有没有其他人遇到过这个问题,知道如何解决吗? 谢谢!

出现此问题是因为 entities: [__dirname + '/**/*.entity{.ts,.js}'],。因为 __dirname 不会以某种方式解析到您的项目目录,而是 '',它会尝试扫描您的整个驱动器以查找实体,但显然没有这样做的权限。

解决方法

不是扫描实体,而是明确列出它们:

entities: [UserEntity, ProductEntity],

如果你正在为 hmr 使用 webpack,你也可以尝试以下配置来正确解析 __dirname

webpack.config.js:
node: {
  __dirname: false,
},

这对我有帮助:

entities: [__dirname + '/../**/*.entity{.ts,.js}']

注意起始路径'/../'表示从绝对路径开始扫描