gpt4 book ai didi

mongodb - 无法将Mongodb连接到docker中的Springboot容器

转载 作者:可可西里 更新时间:2023-11-01 10:02:06 25 4
gpt4 key购买 nike

我尝试了很多选项来从 docker 访问 MongoDB 图像。它在 docker 之外工作正常,但如果我在 docker 容器中运行应用程序,它会显示错误。下面提到的是错误的屏幕截图。另外,分享了我正在运行的连接和命令的代码。

运行spring boot应用程序时出现异常

logs

Mongo Db 容器运行 containers

用于连接docker MongoDB镜像的Java代码

MongoClient mongo = new MongoClient("mongodb//db", 27017));

我也尝试过其他选择

MongoClient mongo = new MongoClient("localhost", 27017));

如果我直接运行 jar 但在 docker 容器中不起作用,它工作正常。

请提供解决方案。

最佳答案

问题

您正在尝试使用错误的 IP/主机名访问数据库。如您所见,访问 spring 容器中的 localhost 将解析为该容器,并且那里没有监听的 27017 端口。当您在 docker 主机上运行 jar 时,它有可用的 27017 端口,这就是它工作的原因。 enter image description here

解决方案

您可以在 docker run 命令中使用 --hostname 标志来设置数据库容器的主机名,以便您可以使用主机名从 Spring 容器连接到它。

但是,更好的解决方案是使用 docker-compose 文件并使用 docker-compose up 启动容器。

首先使用

MongoClient mongo = new MongoClient("db", 27017));

在您的 Spring 代码中构建您的代码的镜像。

然后,按照以下步骤启动容器:

A) 创建撰写文件

创建一个名为 docker-compose.yml 的文件,内容如下:

version: "2.1"
services:
app:
# replace imageName with your image name (block in your case)
image: imageName:tag
ports:
- 9876:4000 # Replace the port of your application here if used
depends_on:
- db
db:
image: mongo
volumes:
- ./database:/data
ports:
- "27017:27017"

B) 运行撰写文件

执行以下命令来运行撰写文件:docker-compose up -d

关于mongodb - 无法将Mongodb连接到docker中的Springboot容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50037772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com