尝试对Node Express Mongo应用进行Docker化,在本地前端和后端运行都可以正常通信。在Docker中,前后服务器均启动。该应用程序的登录页面已加载,但获取和创建数据失败。
与Mongo的连接在下面-端口27017已被另一个容器使用,因此我暴露了端口27027
mongoose.connect(
"mongodb://mongo:27027/report",
{ useNewUrlParser: true, useCreateIndex: true }
);
在dockerfile中
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" ]
Docker-compose
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 净:: ERR_EMPTY_RESPONSE
与mongoose.connect和API_URL中的localhost相同的代码成功获取和创建。为什么在Docker中无法连接?
感谢您的帮助。
答案 0 :(得分:0)
使用容器时,我会避免使用IP。改用容器的名称。 IP可以更改,这取决于docker引擎。
您的Dockerfile也公开了一个端口(5600),但您正在docker-compose中映射另一个端口。
答案 1 :(得分:0)
让它可以用于2个修订版本。因为API和客户端位于单个容器中,所以docker-compose必须公开两个端口。第一个用于客户端,第二个用于API
ports:
- 8888:8080
- 5600:5600
是的,就像Mihai的回答一样,API_URL应该保留在本地主机
const API_URL ='http://localhost:5600'
'