【发布时间】:2019-05-12 18:30:36
【问题描述】:
我在 Docker 上有一个三层应用程序,包括以下内容: 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-compose.yml文件中的其他容器名称(例如、api)作为主机名。 -
所以,你在我的浏览器/邮递员中说,我应该调用 api:3333 和 web:3000/ 而不是 localhost:3333 和 localhost:3000?
标签: node.js docker docker-compose adonis.js