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:latest
和 mysql: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}']
注意起始路径'/../'
表示从绝对路径开始扫描
每当我 运行 我的 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:latest
和 mysql: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
:
node: {
__dirname: false,
},
这对我有帮助:
entities: [__dirname + '/../**/*.entity{.ts,.js}']
注意起始路径'/../'
表示从绝对路径开始扫描