node.js - 如何在 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/”时,我希望得到一个页面。相反,它说它无法连接到服务器。
解决方案
如果你想使用 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"
推荐阅读
- r - 使用 ggplot 在图表中总结 Mann Kendall 测试结果
- c# - 有没有办法检查一个网格单元,而不是数据网格单元,是否包含一个对象
- java - 在 Maven 包的 jar 中包含依赖项
- swift - Kotlin 相当于 Swift 的 sorted(by:)
- r - 超过 2 个有序变量的排序因子
- gradle - groovy 编译器对 gradle 依赖语法做了什么
- html - 如何通过 ruby 表单显示 html 代码
- python - 如何使用两个单独的数据框在 Pandas 中执行 SumProduct()
- php - 如何使用按钮单击将第 1 页上的代码 $ _GET 自动复制到第 2 页
- javascript - 如何更改在线网站上画布的像素,以便其他人可以看到更改