Docker 容器内使用 MongoDB 出现 "connection refused" 错误的解决方式

阅读时长 3 分钟读完

Docker 容器是现代应用开发的重要环节,但是在使用容器时,我们可能会遇到容器内应用程序无法连接 MongoDB 数据库、出现 "connection refused" 错误等问题。本文将探讨 Docker 容器内使用 MongoDB 出现 "connection refused" 错误的解决方式。

容器网络问题

当我们在本地使用 Docker 运行 MongoDB 时,通常会遇到默认网络连接错误的问题。这是因为 Docker 将 MongoDB 容器与主机隔离,因此容器使用的是独立的内部网络,而不是主机网络。因此,如果我们想连接 MongoDB 容器,需要使用容器 IP 地址。但是,这不总是最好的解决方案,因为每次容器重启后,IP 地址也会更改。因此,我们需要使用 Docker Compose。

使用 Docker Compose

Docker Compose 是一个工具,它允许您通过一个 YAML 文件定义和运行多个 Docker 容器来构建和部署多容器的 Docker 应用程序。使用它,我们可以配置网络、容器、卷、环境变量等。在这里,我们将使用它配置网络。

首先,我们需要定义一个 Docker Compose 文件:

-- -------------------- ---- -------
-------- ---

---------
  --------
    ------ -----
    --------------- -------
    -------- ------
    ------
      - -------------
    ---------
      - -----------

---------
  ------------
    ------- ------

在此文件中,我们定义了一个名为 mongodb 的服务,这将使用 Mongo 映像并将容器命名为 mongodb。我们将此容器的 27017 端口映射到主机的 27017 端口。此外,我们还配置了一个名为 app-network 的网络。我们使用 'bridge' 驱动程序将 mongodb 服务和 app-network 连接起来。现在,我们可以运行此配置,以创建容器并将它们自动连接到 app-network 网络:

接下来,我们可以进入我们的 Node.js 应用程序,并更改数据库连接语句以包含 MongoDB 容器的名称。在这里,我们将使用 Mongoose 库连接 MongoDB。

-- -------------------- ---- -------
----- -------- - --------------------

------------------------------------------ -
  ---------------- -----
  ------------------- ----
--
  -------------- -- -
    ---------------------- -- ----------
  --
  -------------- -- -
    ---------------------
  ---

在这里,我们通过连接字符串所指定的名称 "mongodb" 找到容器名称。如果您将容器命名为 mongodb ,则连接字符串将成为 mongodb://mongodb/test。'test' 是数据库名称。这样,我们就可以通过容器名称连接 MongoDB。现在,我们的 Node.js 应用程序应该能够连接到容器化的 MongoDB。

总结

在本文中,我们探讨了 Docker 容器内使用 MongoDB 出现 "connection refused" 错误的解决方式。我们首先探讨了容器网络问题,然后介绍了如何使用 Docker Compose 配置网络连接,最后演示了如何在 Node.js 应用程序中使用容器名称连接 MongoDB。希望这篇文章对解决您的 Docker 容器化 MongoDB 连接问题有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651e1ff795b1f8cacd5cf421

纠错
反馈