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 网络:
docker-compose up -d
接下来,我们可以进入我们的 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