Express容器无法使用Docker-Compose连接到Mongo Image

时间:2018-09-04 20:31:14

标签: mongodb express docker docker-compose

我正在尝试使用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"

1 个答案:

答案 0 :(得分:0)

在docker容器中运行的每个进程都认为他是“世界上唯一的一个”。这意味着对于此过程,localhost意味着:我的容器的localhost。而且您的后端独自在他的容器中,这就是为什么他无法在localhost下找到mongodb的原因。

要解决该问题,您应该在docker-compose中放置主机名“ mongodb”而不是“ localhost”,您可以使用服务名来访问服务-这意味着mongodb容器也可以使用“后端”域访问您的后端。

请注意,“链接”在docker中已被弃用,因此不应使用-您的配置中不需要使用“链接”,因为docker-compose可使用上述方法相互访问docker-compose文件中的每个服务。