我在将作为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

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

现在,我正在运行nodeJS应用程序docker容器(这是来自meteorJS的构建):
$ docker run -it 0b422defbd59 /bin/bash

在这个Docker容器中,我想通过运行以下命令来运行应用程序:
$ node main.js

现在我得到了错误
Error: MONGO_URL must be set in environment

我已经尝试通过设置以下内容来设置MONGO_URL:
ENV MONGO_URL mongodb://mongo_live:27017/

但这不起作用:
MongoError: failed to connect to server [mongo_live:27017] on first connect

所以我的问题是如何连接到数据库,据我所知,它是正在运行的容器的“外部”。或者,如何为该容器设置一个新的数据库?

最佳答案

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

  • 在与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端口绑定(bind)到主机,并在应用程序
  • 中使用主机的主机名
  • 您可以使用docker network并在同一网络中运行两个应用程序
  • 您可以将--add-host mongo_live:<ip of mongo container>传递给应用程序的docker run,然后将mongo_live用作mongodb url
  • 您也可以使用docker compose使您的生活更轻松;)

  • ...

    关于node.js - 如何将NodeJS Docker容器连接到mongoDB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43962012/

    10-12 14:03
    查看更多