首页 > 解决方案 > 如何在 Docker 容器中访问 Node API

问题描述

我在 Docker tat 上有一个三层应用程序,包括以下内容: 1. Adonis 应用程序作为应用程序的 api 到服务器 2. MongoDB 数据库 3. 客户端应用程序的 NuxtJS 应用程序。

当我在本地运行应用程序时,docker-compose up它似乎启动得很好。但是,当我尝试使用 postman (localhost:3333) 访问 api 或尝试访问浏览器上的 Next 应用程序 (localhost:3000/) 时,我收到“无法获得任何响应”错误和“无法打开页面错误”分别。

除了在 docker-compose.yml 文件上指定端口映射之外,我还尝试在每个组件的 Dockerfile 中公开端口。

这是我的 API 应用程序的 Dockerfile

# The API application

FROM node:alpine
WORKDIR home/api

COPY ./server-api/package.json .
RUN npm install
COPY  ./server-api .

EXPOSE 3333

CMD ["npm", "start"]

这是 NuxtJS 应用程序的 Dockerfile

# The Web application

FROM node:latest
WORKDIR home/app

COPY ./web-client/package.json .
RUN npm install
COPY ./web-client .

EXPOSE 3000

CMD ["npm", "start"]

这是我的 docker-compose.yml 文件

version: '3'

services:

  api:
    build: ./server
    restart: always
    ports:
      - "3333:3333"

  mongodb:
    image: 'mongo'
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: NoneOfYourBusiness

  web:
    build: ./web
    restart: always
    ports:
      - "3000:3000"

当我向“localhost:3333/”发送 GET 请求时,我希望得到“test”的响应。但是,我从邮递员那里收到“无法得到任何响应”错误。

当我通过浏览器访问“localhost:3000/”时,我希望得到一个页面。相反,它说它无法连接到服务器。

标签: node.jsdockerdocker-composeadonis.js

解决方案


如果你想使用 localhost 访问,你应该与 docker 共享你的主机网络接口。否则,lo iface 是不同的。明确地,尝试使用这个 docker-compose:

version: '3'

services:

  api:
    build: ./server
    restart: always
    network_mode: "host"
    ports:
      - "3333:3333"

  mongodb:
    image: 'mongo'
    restart: always
    network_mode: "host"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: NoneOfYourBusiness

  web:
    build: ./web
    restart: always
    network_mode: "host"
    ports:
      - "3000:3000"

推荐阅读