获取对Mongodb的请求,返回对IP地址的空响应,本地主机上的相同代码按预期工作

时间:2019-03-29 17:05:10

标签: mongodb express mongoose docker-compose

尝试对Node Express Mongo应用进行Docker化,在本地前端和后端运行都可以正常通信。在Docker中,前后服务器均启动。该应用程序的登录页面已加载,但获取和创建数据失败。

与Mongo的连接在下面-端口27017已被另一个容器使用,因此我暴露了端口27027

mongoose.connect(
  "mongodb://mongo:27027/report",
  { useNewUrlParser: true, useCreateIndex: true }
);

在dockerfile中

FROM node:10
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm install -g nodemon
EXPOSE 5600
CMD [ "npm", "run", "dev"  ]

Docker-compose

version: '3'
services:
  app:
    build: ./
    container_name: report-node
    restart: always
    working_dir: /usr/src/app
    environment:
      NODE_ENV: development
    ports:
      - 8880:8080
    volumes:
      - ./:/usr/src/app
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - 27027:27017
    volumes:
      - ./data:/data/db

获取数据的获取请求是

const API_URL = 'http://192.168.141.175:5600';

export default {
    getReports() {
        return ezFetch.get(`${API_URL}/api/report/list`)
},

返回的错误是

  

获取http://192.168.141.175:5600/api/report/list   净:: ERR_EMPTY_RESPONSE

与mongoose.connect和API_URL中的localhost相同的代码成功获取和创建。为什么在Docker中无法连接?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

使用容器时,我会避免使用IP。改用容器的名称。 IP可以更改,这取决于docker引擎。

您的Dockerfile也公开了一个端口(5600),但您正在docker-compose中映射另一个端口。

答案 1 :(得分:0)

让它可以用于2个修订版本。因为API和客户端位于单个容器中,所以docker-compose必须公开两个端口。第一个用于客户端,第二个用于API

ports:
  - 8888:8080
  - 5600:5600

是的,就像Mihai的回答一样,API_URL应该保留在本地主机

  

const API_URL ='http://localhost:5600'

'