无法从其他Docker容器连接到MongoDB容器

时间:2018-12-19 04:03:20

标签: mongodb docker

我有两个通过Docker compose链接在一起的容器,我可以使用主机名从包含node.js应用程序的容器中成功ping包含MongoDB的容器。但是,当涉及到实际连接数据库时,node.js会告诉我该连接被拒绝。如果有帮助,我正在使用Docker for Mac。


    mongoose.connect("mongodb://mongo", {server: {auto_reconnect: true}}).catch(error => {
            console.log("DB CONNECTION ERROR");
            console.log(error)
        });


这是我的docker-compose.yml文件:

    version: "3"

    services:
      mongo:
        image: mongo:latest
        volumes:
          - ./db:/data/db
        restart: always
        expose:
          - 27017
        ports:
          - 27017:27017
        container_name: mongo

      goose:
        depends_on:
          - mongo
        build: .
        volumes:
          - ./app/server/templates:/usr/src/app/app/server/templates
        expose:
          - 3005
        restart: always
        ports:
          - 3005:3005
        container_name: goose-compose

3 个答案:

答案 0 :(得分:0)

  

暴露端口而不将其发布到主机上-只有链接的服务才能访问它们。只能指定内部端口。

src docker docs

如果您想采用这种方法,使用网桥网络模式(据我所知,这是默认设置)和 expose ,则必须使用 links ,将会很快(或已经),或 network (或 networks -我记不清)属性弃用。

也值得一看文档的networking in compose部分。

[edit]
顺便说一句,暴露甚至可能被省略,因为您正在映射容器的端口以承载主机(我认为)。如果我错了,请用这个纠正我。

干杯。

答案 1 :(得分:0)

我也遇到了Windows上的Spring Boot应用程序和mongo db的相同问题。 尝试在Dockerfile中以ENTRYPOINT下的格式提供以下格式的mongo uri:data.mongodb.uri = mongodb://:27017 /。

希望这会有所帮助。

答案 2 :(得分:0)

我有一个类似构建的应用程序,在两个独立的容器中使用了 Flask 和 mongodb。我注意到您和我的 compose 之间的一个区别是,您为每个容器都提到了卷,但没有卷定义,如下所示:

version: "3"
services:
  web:
    image: jzakilla/bookfinderpy
    command: nginx -g "daemon off;"
    container_name: webapp
    ports:
      - 80:80
      - 443:443 # expose internal container ports to host
  db:
    image: mongo
    container_name: mongodb
    ports:
      - 27017:27017
    volumes:
      - book_db:/data/db
volumes:
  book_db:
    driver: local  

如果没有卷部分和告诉容器如何访问数据的驱动程序,我会想象容器会启动,但实际上无法启动 mongo 服务,从而给您一个拒绝错误。