如何将nodeJS docker容器连接到mongoDB

时间:2017-05-14 08:45:03

标签: node.js mongodb docker

将连接作为docker容器运行的nodeJS应用程序连接到mongoDB时遇到问题。让我解释一下到目前为止我所做的事情:

c, d,d or o

如您所见,已经有一个mongo docker容器正在运行。

现在我正在运行我的nodeJS应用程序docker容器(这是meteorJS的构建):

$ docker ps

CONTAINER ID    IMAGE        COMMAND                  CREATED        STATUS        PORTS        NAMES
3a3732cc1d90    mongo:3.4    "docker-entrypoint..."   3 weeks ago    Up 3 weeks    27017/tcp    mongo_live

在这个docker容器中,我想运行以下命令来运行应用程序:

$ docker run -it 0b422defbd59 /bin/bash

现在我收到了错误

$ node main.js

我已经尝试通过设置:

来设置MONGO_URL
Error: MONGO_URL must be set in environment

但这不起作用:

ENV MONGO_URL mongodb://mongo_live:27017/

所以我的问题是如何连接到数据库,据我所知 - 在运行容器的“外部”。另外,如何为此容器设置新数据库?

3 个答案:

答案 0 :(得分:9)

有几种方法可以做到。

  • 在与mongodb相同的网络中运行您的应用:

    docker run --net container:mongo_live your_app_docker_image
    
    # then you can use mongodb in your localhost
    $ ENV MONGO_URL mongodb://localhost:27017/
    
  • 您还可以链接两个容器:

    docker run --link mongo_live:mongo_live you_app_image ..
    # Now mongodb is accessible via mongo_live
    
  • 使用mongodb容器ip地址:

    docker inspect -f '{{.NetworkSettings.IPAddress}}' mongo_live
    # you will get you container ip here
    
    $ docker run -it 0b422defbd59 /bin/bash
    # ENV MONGO_URL mongodb://[ip from previous command]:27017/
    
  • 您可以将mongodb端口绑定到主机并在应用中使用主机的主机名

  • 您可以使用docker network并在同一网络中运行这两个应用

  • 您可以将--add-host mongo_live:<ip of mongo container>传递给针对您的应用的docker run,然后将mongo_live用于mongodb url

  • 您还可以使用docker compose让您的生活更轻松;)

...

答案 1 :(得分:1)

当您运行容器时,每个容器都在独立的网络中工作。因为一个容器不能连接到其他点对点。

有三种连接容器的方法

  1. 对低级码头network magic
  2. 有点小问题
  3. 通过localhost连接容器。每个容器必须暴露localhost上的端口(作为您的mongo_live)。但是你需要在localhost 127.0.0.1 mongo_live上添加主机ile(这是最简单的方式
  4. 使用docker-compose。它是将多个容器组合在一起的便捷工具。 (这是正确的方式
  5. 将mongodb添加到应用程序容器中并非停泊方式。

答案 2 :(得分:0)

请使用以下代码段为您的docker-compose.yml文件,将评论替换为您的实际值。应该解决你的问题。

version: '2'
    services:
      db:
        build: <image for mongoDB>
        ports:
          - "27017:27017"  # whatever port u r using
        environment:
          #you can specify mondo db username and stuff here
        volumes:
          - #load default config for mondodb from here
          - "db-data-store:/data/db" # path depends on which image you use
        networks:
          - network
     nodejs:
        build: #image for node js
        expose:
          - # mention port for nodejs
        volumes:
          - #mount project code on container
        networks:
          - network
        depends_on:
          - db

networks:
  network:
    driver: bridge

请使用以下链接作为参考:
1)NodeJs Docker
2)MongoDb docker
3)docker-compose tutorial

最好的运气