com.mongodb.MongoSocketOpenException:异常打开套接字(MongoDB,Docker)
Posted
技术标签:
【中文标题】com.mongodb.MongoSocketOpenException:异常打开套接字(MongoDB,Docker)【英文标题】:com.mongodb.MongoSocketOpenException: Exception opening socket(MongoDB, Docker) 【发布时间】:2018-01-26 08:01:43 【问题描述】:我尝试使用 docker 映像启动我的应用程序(Spring Boot + Spring Cloud + Eureka + MongoDB),但我无法连接到 MongoDB。
例外:
exception "com.mongodb.MongoSocketOpenException: Exception opening socket."
我使用执行命令启动我的应用程序:docker-compose up --build
Docker 日志:
application.yml:
# Spring properties
spring:
application:
name: car-service
data:
mongodb.host: localhost
mongodb.port: 32769
mongodb.uri: mongodb://localhost/test
mongo.repositories.enabled: true
# Discovery Server Access
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
# HTTP Server (Tomcat) Port
server:
port: 2220
error:
whitelabel:
enabled: false
docker-compose.yml:
eureka:
build: ./eureka-discovery-service
ports:
- "8761:8761"
mongodb:
image: mongo:3.0.4
ports:
- "32769:32769"
postgresql:
image: postgres:9.6.1
ports:
- "32770:32770"
gateway-service:
build: ./gateway-service
ports:
- "9090:9090"
links:
- eureka
environment:
SPRING_APPLICATION_NAME: gateway-service
SPRING_PROFILES_ACTIVE: enableEureka
EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/
airplane-service:
build: ./airplane-service
ports:
- "2222:2222"
links:
- eureka
- postgresql
environment:
SPRING_APPLICATION_NAME: airplane-service
SPRING_PROFILES_ACTIVE: enableEureka
EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/
SPRING_SLEUTH_ENABLED: "true"
SPRING_DATASOURCE_POSTGRESQL_URL: jdbc:postgresql://localhost:32770/postgres
car-service:
build: ./car-service
ports:
- "2220:2220"
links:
- eureka
- mongodb
environment:
SPRING_APPLICATION_NAME: car-service
SPRING_PROFILES_ACTIVE: enableEureka
EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/
SPRING_SLEUTH_ENABLED: "true"
SPRING_DATA_MONGODB_URI: mongodb://localhost:32769/test
machine-service:
build: ./machine-service
ports:
- "2224:2224"
links:
- eureka
environment:
SPRING_APPLICATION_NAME: machine-service
SPRING_PROFILES_ACTIVE: enableEureka
EUREKA_INSTANCE_PREFER_IP_ADDRESS: "true"
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/
SPRING_SLEUTH_ENABLED: "true"
为什么我打开套接字时出现异常?如何解决这个问题?
【问题讨论】:
【参考方案1】:您将属性文件中的 mongodb 主机设置为 localhost。在容器 localhost 地址本身中,但您的 mongodb 不在在 car-service 运行的容器(car-service)中。当您使用 docker compose 时,您可以用它的名字寻址一个容器。在您的情况下,它是 mongodb。
【讨论】:
【参考方案2】:澄清@barbakini 的答案,在applications.yaml 使用中定义它:
spring.data.mongodb.host: mongodb
【讨论】:
这个答案与之前的答案有何不同? 它是显式的,而不是隐式的:)【参考方案3】:您的 mongoDB 服务未启动,
通过以下命令检查状态
sudo service mongodb status
sudo service mongodb start
希望它能起作用,也可能有几个原因, 就像您在应用程序中为 mongodb 服务定义的配置不正确,例如端口。
【讨论】:
可能是 Mongo 尚未安装。 mongodb:无法识别的服务【参考方案4】:尝试添加network_mode: host
并删除links: ....
对于所有想要在 docker-compose.yml 中连接 mongo、eureka 或 postgresql 的服务。
通过这样做,您将连接到 docker localhost。
【讨论】:
以上是关于com.mongodb.MongoSocketOpenException:异常打开套接字(MongoDB,Docker)的主要内容,如果未能解决你的问题,请参考以下文章