如何在Docker容器中访问Node API

时间:2019-05-12 18:30:37

标签: node.js docker docker-compose adonis.js

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

当我使用docker-compose up在本地运行应用程序时,似乎可以正常启动。但是,当我尝试使用邮递员(localhost:3333)访问api或尝试在浏览器(localhost:3000 /)上访问Next应用程序时,出现“无法获得任何响应”错误和“无法打开页面错误”。

除了在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"

当我将GET请求发送到“ localhost:3333 /”时,我希望得到“测试”的响应。但是,我收到了来自邮递员的“无法得到任何答复”错误。

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

2 个答案:

答案 0 :(得分:1)

从您的计算机上

您应该可以在当前设置中使用localhost:3333。您可以再次检查程序是否正在端口3333上侦听(在Linux上为lsof -i:3333)。

从docker内部:

设置网络并使用容器名称来调用它们,例如

version: '3'

networks:
    back:

services:

  api:
    build: ./server
    restart: always
    ports:
      - "3333:3333"
    networks:
      - back
  mongodb:
    image: 'mongo'
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: NoneOfYourBusiness
    networks:
      - back
  web:
    build: ./web
    restart: always
    ports:
      - "3000:3000"
    networks:
      - back

web容器中,您可以调用api:3333来获取api。

顺便说一句,您不需要Dockerfile中的EXPOSES 3333,因为它已经在docker-compose文件中完成了。

答案 1 :(得分:0)

如果要使用localhost访问,则应与docker共享主机网络接口。否则,loacece不一样。 确定地,尝试使用此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"