如何将nodeJS docker容器连接到mongoDB

use*_*695 6 mongodb node.js docker

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

$ docker run -it 0b422defbd59 /bin/bash
Run Code Online (Sandbox Code Playgroud)

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

$ node main.js
Run Code Online (Sandbox Code Playgroud)

现在我收到了错误

Error: MONGO_URL must be set in environment
Run Code Online (Sandbox Code Playgroud)

我已经尝试通过设置来设置MONGO_URL:

ENV MONGO_URL mongodb://mongo_live:27017/
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

MongoError: failed to connect to server [mongo_live:27017] on first connect
Run Code Online (Sandbox Code Playgroud)

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

Boy*_*nux 10

有几种方法可以做到这一点.

  • 在与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/
    
    Run Code Online (Sandbox Code Playgroud)
  • 您还可以链接两个容器:

    docker run --link mongo_live:mongo_live you_app_image ..
    # Now mongodb is accessible via mongo_live
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用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/
    
    Run Code Online (Sandbox Code Playgroud)
  • 您可以将mongodb端口绑定到主机,并在应用程序中使用主机的主机名

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

  • 您可以--add-host mongo_live:<ip of mongo container>为您的应用程序传递docker run,然后使用mongo_livemongodb url

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

...