java无法连接到mongo容器
我之前有一个问题(至少我认为)当我设法修复出现的错误时,或多或少变得毫无用处。。然而,我的新错误是,我似乎无法从docker映像中连接到mongodb
docker撰写。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
# 1 楼答案
我同意大卫的回答是正确的。但这里有一个外卖,你的配置也很有效,我尝试了我的样本,结果如下
问题是你的应用程序没有连接到网络
示例docker compose。yml
mongo容器ip地址:
docker网络设置
输出:
# 2 楼答案
您已在
docker-compose.yml
文件中显式创建了一个网络,并将数据库设置为使用该网络。Docker Compose还为您创建了一个默认网络,因为您的应用程序没有显式声明任何网络,所以它只连接到默认网络。然后这两个容器在不同的网络上,一个无法到达另一个这里最简单的解决方案是删除所有手动网络配置:
服务块的名称将是一个有效的DNS主机名,在您的配置中,您可以设置
spring.data.mongodb.host=mongo