我有一个Nestjs服务器,我试图运行在一个docker容器,我也试图运行一个本地版本的mysql数据库,以及我使用docker组成,以保持他们在同一网络上。
这是我得到的错误
服务器_1|[Nest] 2022年8月24日,2:20:22下午错误[TypeOrmModule]无法连接到数据库。正在重试(6)... server_1|错误:连接ECONNREFUSED 127.0.0.1:3306服务器_1|在TCP连接换行处。连接后[作为完成时](节点:网络:1247:16)
我是新的 Docker ,但一直试图复制教程确切,仍然不能弄清楚为什么这不会工作。
这是我的Docker合成文件
version: '3.9'
services:
server:
build:
context: .
dockerfile: Dockerfile
ports:
- 8000:8000
volumes:
- .:/server-workdir
- '/server-workdir/node_modules'
depends_on:
- local_db
local_db:
container_name: "local_db"
image: mysql:8.0
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=local
- MYSQL_PASSWORD=root
- MYSQL_ROOT_PASSWORD=root
下面是我的服务器的dockerfile
FROM node:latest
WORKDIR /server-workdir
COPY package.json /server-workdir
RUN yarn install
COPY . /server-workdir/
RUN yarn run build
VOLUME [ "/server-workdir/node_modules" ]
CMD [ "yarn", "dev" ]
下面是我的巢应用程序的应用程序配置(减去任何敏感信息)
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [config]
}),
TypeOrmModule.forRoot({
type: "mysql",
host: "local_db",
port: parseInt(process.env.DB_PORT),
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
entities: [],
synchronize: true,
}),
TypeOrmModule.forFeature([SeederHistory]),
JwtModule.register({
secret: process.env.JWT_SECRET,
signOptions: { expiresIn: process.env.JWT_EXPIRY_TIME },
}),
],
controllers: [],
providers: [
{
provide: APP_GUARD,
useClass: JwtAuthGuard,
},
{
provide: APP_GUARD,
useClass: RolesGuard,
},
{
provide: APP_PIPE,
useClass: ValidationPipe,
},
SeederService,
],
})
export class AppModule {}
下面是. env文件
PORT="8000"
DB_HOST = "local_db"
DB_PORT = "3306"
DB_USERNAME = "root"
DB_PASSWORD = "root"
DB_NAME = "local"
JWT_EXPIRY_TIME = "2d"
HASH_ROUNDS = "14"
JWT_SECRET = "testSecret"
这确实在本地运行(不使用Docker容器),真的不确定这里出了什么问题,Docker对我来说还是个新手
1条答案
按热度按时间mhd8tkvw1#
算了,不用
localhost
,用host.docker.internal
代替