docker中无法连接mongodb到springboot容器
·
问题:docker中无法连接mongodb到springboot容器
我尝试了许多选项来从 docker 访问 MongoDB 映像。它在 docker 之外工作正常,但如果我在 docker 容器中运行应用程序,它会显示一个错误。下面提到的是错误的屏幕截图。另外,分享了我正在运行的连接代码和命令。
运行 Spring Boot 应用程序时出现异常

Mongodb 容器正在运行
用于连接 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端口可用,这就是它工作的原因。 
解决方案
您可以在docker run命令中使用--hostname标志来设置 DB 容器的主机名,以便您可以使用主机名从 Spring 容器连接到它。
然而,更好的解决方案是使用 docker-compose 文件并使用docker-compose up启动容器。
首先使用
MongoClient mongo = new MongoClient("db", 27017));
在您的 Spring 代码中并构建代码的图像。
之后,按照以下步骤启动容器:
A) 创建 Compose 文件
创建一个名为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
更多推荐
所有评论(0)