【问题标题】:db connection path to connect application that is running in dockerdb 连接路径以连接在 docker 中运行的应用程序
【发布时间】:2018-06-30 22:46:06
【问题描述】:

我正在 docker 中运行 nodejs 应用程序。在该应用程序中,我正在尝试连接我的系统数据库。但它不起作用

在我的环境文件中:

**MONGODB_URI=mongodb://192.168.1.174:27017/sampleDB**
SESSION_SECRET=sample
App_PORT = 8088

但我收到错误,无法访问数据库。

我的应用程序运行在 docker machine ip 192.168.99.100:8088

在这里,我附上了我的 docker 运行命令语句: 如何将我的系统数据库连接到该应用程序

【问题讨论】:

  • 我猜 192.168.1.174 是你主机的 IP 地址。您确定 mongo 正在侦听所有接口,而不仅仅是 localhost?
  • 是的。如果我将 mongodb 路径作为 localhost 或任何其他 ip,例如 192.168.1.88 ip,它也会连接到该 ip 地址
  • 通常nodejs在localhost中成功运行并使用192.68.1.174 db(其他系统db)。当我尝试在 docker 中运行这个数据库路径时,我没有得到
  • 在你的主机(运行 mongodb 的地方),尝试运行netstat -ntpl | grep 27017
  • 我应该在哪里执行上述命令

标签: mongodb docker robo3t


【解决方案1】:

IP 取决于容器的运行方式。如果使用docker-compose,它会为您创建一个网络,在该网络中容器可以使用服务名称访问(例如,db 如果您使用它)。如果没有,并且您没有指定任何网络,则使用默认的 bridge 网络(在您的 docker 机器上称为 docker0)。

由于您单独运行容器(使用docker run),您必须为容器提供特定的IP地址(您可以使用docker exec container_name ip a从容器内部获取一个)或通过网关连接到它(您的码头机器)。但是,为了做到这一点,必须公开数据库端口(例如,运行时27017:27017)。

我建议你从现在开始使用docker-compose,当运行一堆链接容器时,很多事情会变得更容易。

【讨论】:

  • 我正在使用 docker run -d 8088:8088 nitikishu/samplenodejs 运行我的容器。应用程序正在该 docker 机器默认 IP 地址 192.168.99.100:8088 上运行,我的应用程序正在运行。但我无法登录应用系统。在我的应用程序中,我尝试连接另一个系统 ip 为 192.168.1.174 的系统数据库。它没有连接到那个系统
  • 这是一个不同的网络,所以它看起来像是 docker 机器内部的防火墙问题。就像我说的,开始使用docker-compose 或创建一个 docker 网络,让这些容器加入该网络。或者开始使用 Linux,Windows 上的 Docker 糟透了。
  • 但是如果我在我的 localhost:8088 中运行 nodejs 应用程序,它将运行并与其他系统 db(192.168.1.174) 连接。我正在尝试在docker中做同样的事情。它没有发生。我已经使用环境变量为应用程序构建了映像:mongodb-uri=monogdb://192.168.1.174:27017/sampleDB 端口 8088。当我在 docker 中运行映像时,例如 docker run -d 8088:8088 nitikishu/samplenodejs 我得到像我在屏幕截图中分享的错误。来自此 url 的 Docker 机器 ip 192.168.99.100:8088 只有该映像正在运行。拉动并在 docker 中运行后,它没有在我的本地主机中运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多