简体   繁体   English

Nestjs/TypeORM 无法连接到 Docker MariaDB

[英]Nestjs/TypeORM Cannot connect to Docker MariaDB

Whenever I run my docker image containing nodejs 11.10 & mariadb, I get the following error:每当我运行包含 nodejs 11.10 和 mariadb 的 docker 映像时,都会出现以下错误:

[Nest] 16 - 3/12/2019, 11:24:02 AM [TypeOrmModule] Unable to connect to the database. [Nest] 16 - 3/12/2019, 11:24:02 AM [TypeOrmModule] 无法连接到数据库。 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)重试 (9)... +3587msError: EPERM: operation not allowed, 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) 在 GlobSync._readdirInGlobStar (/app/node_modules/glob/sync.js:267:20) 在 GlobSync._readdir (/app/node_modules/glob/sync.js:276: 17) 在 GlobSync._processReaddir (/app/node_modules/glob/sync.js:137:22) 在 GlobSync._process (/app/node_modules/glob/sync.js:132:10) 在 GlobSync._processGlobStar (/app/ node_modules/glob/sync.js:380:10) 在 GlobSync._process (/app/node_modules/glob/sync.js:130:10) 在 GlobSync._processGlobStar (/app/node_modules/glob/sync.js:383: 10) 在 GlobSync._process (/app/node_modules/glob/sync.js:130:10)

The same issue happens when I use mysql:latest & mysql:5.6 .当我使用mysql:latest & mysql:5.6时会发生同样的问题。 This is my connection:这是我的连接:

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

Has anyone else ever had this issue, and so, know how to fix it?有没有其他人遇到过这个问题,所以,知道如何解决它? Thanks!谢谢!

This problem occurs because of entities: [__dirname + '/**/*.entity{.ts,.js}'], .出现此问题的原因是entities: [__dirname + '/**/*.entity{.ts,.js}'], . Because __dirname does somehow not resolve to your projects directory but '' instead, it will try to scan your whole drive for entities and obviously does not have the permissions to do so.因为__dirname以某种方式不会解析到您的项目目录而是'' ,它会尝试扫描您的整个驱动器以查找实体,并且显然没有这样做的权限。

Workaround解决方法

Instead of scanning for entities, list them explicitly:与其扫描实体,不如明确列出它们:

entities: [UserEntity, ProductEntity],

If you are using webpack for hmr, you can also try the following config to resolve __dirname correctly:如果你在 hmr 中使用 webpack,你也可以尝试以下配置来正确解析__dirname

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

This helped me out:这帮助了我:

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

Note the starting path '/../' mean start scanning from absolute path.注意起始路径'/../'表示从绝对路径开始扫描。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM