node.js - 如何将nodeJS docker容器连接到mongoDB

标签 node.js mongodb 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

如您所见,已经有一个 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/

相关文章:

node.js - 完成前浏览器同步与刷新

mongodb - 错误 : "could not find implicit value for parameter readFileReader" trying to save a file using GridFS with reactivemongo

docker - 为什么 Cypress 无法确定服务器是否正在运行?

php - 连接被拒绝 : PHPUnit selenium in Docker

docker - Kubernetes NodePort 类型端点和端口

node.js - 更新 Sequelize 模型时,失败并返回与我提供的不同的表名?

javascript - 正确链接 Promise

node.js - 了解哪些依赖键导致了计算属性的更改

MongoDB - 分页

node.js - MongoDB/Mongoose 的 E11000 重复键错误