首页 > 解决方案 > 连接到 docker 容器内的 Nest.js 服务器

问题描述

我正在尝试为 Nest.js 服务器创建一个容器。目前,我只有在创建 Nest 项目时自动创建的服务器的基本版本。我在 Dockerfile 和 docker-compose 中尝试了一些东西,但是当我启动容器并转到浏览器时,localhost:3042它说页面不工作,但它应该获取一个对象。

所以现在,我的 Dockerfile 看起来像这样:

FROM node:10

WORKDIR /microservices

COPY package*.json ./
COPY tsconfig.json tsconfig.json
COPY src src
RUN ["npm","install","global","@nestjs/cli"]
RUN ["npm", "install"]

EXPOSE 3042

ENTRYPOINT ["npm","run","start"]

我的 docker-compose.yaml 看起来像这样:

version: "3.2"
services:
  server:
    container_name: server
    hostname: localhost
    build: ./
    ports:
    - "3042:3042"

我运行docker-compose up,转到浏览器,它不起作用。

docker-compose up命令的输出是:

server      | [Nest] 18   - 07/12/2019, 1:44 PM   [NestFactory] Starting Nest application...
server      | [Nest] 18   - 07/12/2019, 1:44 PM   [InstanceLoader] AppModule dependencies initialized +26ms
server      | [Nest] 18   - 07/12/2019, 1:44 PM   [RoutesResolver] AppController {/}: +10ms
server      | [Nest] 18   - 07/12/2019, 1:44 PM   [RouterExplorer] Mapped {/, GET} route +7ms
server      | [Nest] 18   - 07/12/2019, 1:44 PM   [NestApplication] Nest application successfully started +5ms

所以似乎内部发生了一些事情并且应用程序成功启动。

我查看了一些示例,其中一个来自他们使用 python 的文档,另一个示例使用Express.js,但没有帮助我。

标签: dockerdocker-composenestjs

解决方案


Nest 默认使用 3000 端口,所以我认为这就是问题所在。您可以尝试在 main.ts 中更改它:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3042);
}

或更改您的 docker 配置。Dockerfile

EXPOSE 3000/tcp

码头工人-compose.yml

version: "3.2"
services:
  server:
    container_name: server
    hostname: localhost
    build: ./
    ports:
    - 3000:3000

推荐阅读