当前位置: 首页 > 面试题库 >

如何将NodeJS Docker容器连接到mongoDB

丌官运诚
2023-03-14
问题内容

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

    $ 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使您的生活更轻松;)



 类似资料:
  • 我无法将作为docker容器运行的应用程序连接到mongoDB。我知道新版本docker compose不推荐使用“链接”,所以我尝试使用自定义网络。我的码头工人。yml: 我的应用程序的Dockerfile: 当我运行时,我在应用程序中得到以下错误消息: 在第一次连接时连接到服务器[127.0.0.1:27017]失败[MongoNetworkError:连接ECONNREFUSED127.0.

  • 问题内容: 我正在使用docker- compose 运行一个应用程序。一切正常,通过连接到容器内的Mongo,我可以看到所有数据。但是,当我连接到RoboMongo时,我看不到任何数据。 我该如何解决这个问题? 问题答案: 您应该在Docker容器内建立到MongoDB的Robomongo SSH隧道连接。首先,您应该在docker容器中安装一个ssh服务器。 https://docs.dock

  • 我的数据库连接是用下面的类处理的: 这是我的spring boot控制器 下面是我的dockerfile: 我读了这里和这里提到的解决方案。也阅读了一些教程,但我无法将这些解决方案中的任何一个适合我的代码。在我的代码中,我应该在哪里更改?

  • 作为解决Hibernate OGM连接问题的一部分,我想看看我是否从Robo 3T连接。 我构建我的MongoDB映像并开始运行。 docker ps: MacBook-Pro:GoStopHandle NOTiFY$docker ps容器ID图像 命令创建状态端口名称0375a68b9988 goStop handlemongob:最新 "docker-entrypoint. s..."5秒前上

  • 问题内容: 我正在练习制作一个与PostgreSQL数据库交互的Golang Web应用程序,每个应用程序都在各自的容器上运行。 我正在运行容器 但是我似乎无法正确设置postgres容器。 为简便起见,指向s和其他设置文件的链接位于此要点上(如果您需要在此处,请告诉我)。 工作良好。但是,当应用程序尝试使用以下方法打开数据库连接时: 我从docker compose得到以下错误: 如何使两个容器

  • 我有一些docker conatiner,现在我想用ssh进入一个。我通过ssh连接到了docker容器。 但是现在我有一个问题,我不知道我可以用哪个用户访问这个容器? 我在主机(web)上的两个用户中都尝试过