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

问题描述

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

与 Mongo 的连接如下 - 端口 27017 已被另一个容器使用,因此我公开端口 27027

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

在泊坞窗文件中

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"  ]

码头工人组成

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 net::ERR_EMPTY_RESPONSE

上面与 mongoose.connect 和 API_URL 中的 localhost 相同的代码成功获取和创建..为什么这不会在 Docker 中连接?

任何帮助表示赞赏。

标签: mongodbexpressmongoosedocker-compose

解决方案


让它与 2 个修订版一起工作。因为 API 和客户端在一个容器中,所以 docker-compose 必须公开两个端口。第一个用于客户端,第二个用于 API

ports:
  - 8888:8080
  - 5600:5600

是的,就像在 Mihai 的回答中一样,API_URL 应该保留在 localhost

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

'


推荐阅读