繁体   English   中英

如何将nodeJS docker容器连接到mongoDB

[英]How to connect nodeJS docker container to mongoDB

我在将作为 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端口绑定到主机,并在应用程序中使用主机的主机名

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

  • 您可以将--add-host mongo_live:<ip of mongo container>传递给您的应用程序的mongo_live运行,然后使用mongo_live作为mongodb url

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

...

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

有三种连接容器的方法

  1. 与低级别的docker 网络魔术有点大惊小怪
  2. 通过localhost连接容器。 每个容器必须暴露localhost上的端口(作为您的mongo_live)。 但是你需要在localhost 127.0.0.1 mongo_live上添加主机ile 127.0.0.1 mongo_live这是最简单的方法
  3. 使用docker-compose 它是将多个容器组合在一起的便捷工具。 这是正确的方法

将mongodb添加到应用程序容器不是docker方式。

请使用以下代码段为您的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教程

最好的运气

我在如何将我的 server.js 连接到 mongodb 时遇到问题。这就是我解决它的方法,希望你觉得它有用。 点击获取我的截图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM