java - 无法连接到 mongo 容器
问题描述
我有一个先前的问题(我认为至少),当我设法修复我遇到的错误时,或多或少变得无用了。但是我的新错误是我似乎无法从我的 docker 映像中连接到 mongodb
码头工人-compose.yml:
version: '3.1'
services:
company-repo-docker-app:
image: company-repo-image
build:
context: ./
dockerfile: Dockerfile
depends_on:
- mongo
ports:
- 8080:8080
mongo:
image: mongo
ports:
- '27017:27017'
networks:
mongo_net:
ipv4_address: 172.28.0.2
networks:
mongo_net:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.28.0.2/24
应用程序属性:
spring.data.mongodb.database=myDb
spring.data.mongodb.host=172.28.0.2
spring.data.mongodb.port=27017
而实际的错误:
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:62) ~[mongodb-driver-core-3.6.4.jar!/:na]
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:126) ~[mongodb-driver-core-3.6.4.jar!/:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) ~[mongodb-driver-core-3.6.4.jar!/:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: java.net.SocketTimeoutException: connect timed out
解决方案
您已在docker-compose.yml
文件中明确创建了一个网络,并将您的数据库设置为使用该网络。Docker Compose 还为您创建了一个默认网络,并且由于您的应用程序没有明确声明任何网络,因此它仅附加到默认网络。然后这两个容器在不同的网络上,一个无法到达另一个。
这里最简单的解决方案是删除所有手动网络配置:
version: '3.1'
services:
company-repo-docker-app:
image: company-repo-image
build:
context: ./
depends_on:
- mongo
ports:
- '8080:8080'
mongo:
image: mongo
ports:
- '27017:27017'
服务块的名称将是有效的 DNS 主机名,您可以在配置中设置spring.data.mongodb.host=mongo
.
推荐阅读
- c# - 如何在 LinkedIn 自定义 URL 中传递 id
- python - 在无服务器 Python 中上传 Opencv-Contrib
- python - 这个while循环不产生输出的原因是什么?
- sql-server - Hibernate 在连接到远程 SQL Server 时出现问题
- apache-spark - SparkML:管道预测的记录少于输入
- ios - 什么可以替代 Swift 4 中的 [MoveCommand]
- angular - 无法读取空反应形式的属性“电子邮件”
- for-loop - 嵌套表达式和相对笛卡尔积
- azure - Azcopy 是否支持移动和删除文件
- php - 使用 PDO 更新旧的 Mysql 语句