mongodb - 获取对 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 中连接?
任何帮助表示赞赏。
解决方案
让它与 2 个修订版一起工作。因为 API 和客户端在一个容器中,所以 docker-compose 必须公开两个端口。第一个用于客户端,第二个用于 API
ports:
- 8888:8080
- 5600:5600
是的,就像在 Mihai 的回答中一样,API_URL 应该保留在 localhost
const API_URL = ' http://localhost:5600 '
'
推荐阅读
- javascript - 在 Sequelize 中选择不存在多属关联的行?
- angular - 从 observabale firestoredocument 获取数据
- java - 从同一个 pojo 数组创建两个列表,修改一个列表,同样的事情也会影响另一个列表
- c# - 为应用程序锁定文件
- c++ - C++ 控制台:解析 METAR 数据
- node.js - 如何将 WIX 模板与 3rd 方 REST API 连接?
- java - 需要帮助实现 FileNameFilter java
- c# - C# Excel Interop - 将函数/模块从字符串添加到工作表
- ios - 在单个屏幕上显示未指定数量的文本元素
- spring-boot - 无法在 Java 8 中设置实例变量值