连接到Docker容器内的Nest.js服务器

时间:2019-07-12 14:02:19

标签: docker docker-compose nestjs

我正在尝试为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的示例,但没有帮助我。

2 个答案:

答案 0 :(得分:0)

默认情况下,嵌套使用端口3000,所以我认为这是问题所在。您可以尝试在main.ts中对其进行更改:

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

或更改您的docker配置。 Dockerfile

EXPOSE 3000/tcp

docker-compose.yml

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

答案 1 :(得分:0)

如果有人遇到同样的问题,我的问题是我在 app.listen 中添加了第二个参数

改成这样:

DSPND_DT

到这里

    await app.listen(this.port, this.host);

解决了我的问题