我正在尝试使用docker compose将Express容器连接到MongoDB映像,但是连接被拒绝,我可以使用robomongo连接到db。我不知道发生了什么,这是连接它的明确代码:
src/main/resources
这是docker-compose文件
mongoose.connect('mongodb://localhost:27017/database')
.then(()=>console.log('connection succesfull to url'))
.catch((err)=>console.error(err));
这是错误
version: "3"
services:
backend:
build:
context: ../backend
dockerfile: ${PWD}/images/backend/Dockerfile
container_name: backend
ports:
- "${BACKEND_PORT}:${BACKEND_PORT}"
env_file:
- ./deploy.env
environment:
- PORT=3000
- MONGO_CONNECTION=${MONGO_CONNECTION}
command: npm start
links:
- mongodb
depends_on:
- mongodb
front-app:
build:
context: ../front-app
dockerfile: ${PWD}/images/angular/Dockerfile
container_name: front-app
ports:
- "${FRONTEND_PORT}:4200"
env_file:
- ./deploy.env
command: npm start
mongodb:
image: mongo:3.6
container_name: mongo
volumes:
- "${MONGO_DB_DATA}:/data/db"
- "${MONGO_DB_DATA}:/data/configdb"
ports:
- "27017:27017"
答案 0 :(得分:0)
在docker容器中运行的每个进程都认为他是“世界上唯一的一个”。这意味着对于此过程,localhost意味着:我的容器的localhost。而且您的后端独自在他的容器中,这就是为什么他无法在localhost下找到mongodb的原因。
要解决该问题,您应该在docker-compose中放置主机名“ mongodb”而不是“ localhost”,您可以使用服务名来访问服务-这意味着mongodb容器也可以使用“后端”域访问您的后端。
请注意,“链接”在docker中已被弃用,因此不应使用-您的配置中不需要使用“链接”,因为docker-compose可使用上述方法相互访问docker-compose文件中的每个服务。>