我在Docker tat上有一个三层应用程序,包含以下内容: 1.将Adonis应用程序作为服务器的API进行服务器处理 2. MongoDB数据库 3.客户端应用程序的NuxtJS应用程序。
当我使用docker-compose up
在本地运行应用程序时,似乎可以正常启动。但是,当我尝试使用邮递员(localhost:3333)访问api或尝试在浏览器(localhost:3000 /)上访问Next应用程序时,出现“无法获得任何响应”错误和“无法打开页面错误”。
除了在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"
当我将GET请求发送到“ localhost:3333 /”时,我希望得到“测试”的响应。但是,我收到了来自邮递员的“无法得到任何答复”错误。
当我通过浏览器转到“ localhost:3000 /”时,我希望得到一个页面。而是说它无法连接到服务器。
答案 0 :(得分:1)
从您的计算机上
您应该可以在当前设置中使用localhost:3333
。您可以再次检查程序是否正在端口3333上侦听(在Linux上为lsof -i:3333
)。
从docker内部:
设置网络并使用容器名称来调用它们,例如
version: '3'
networks:
back:
services:
api:
build: ./server
restart: always
ports:
- "3333:3333"
networks:
- back
mongodb:
image: 'mongo'
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: NoneOfYourBusiness
networks:
- back
web:
build: ./web
restart: always
ports:
- "3000:3000"
networks:
- back
从web
容器中,您可以调用api:3333
来获取api。
顺便说一句,您不需要Dockerfile中的EXPOSES 3333
,因为它已经在docker-compose文件中完成了。
答案 1 :(得分:0)
如果要使用localhost访问,则应与docker共享主机网络接口。否则,loacece不一样。 确定地,尝试使用此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"