【发布时间】:2020-11-27 15:31:58
【问题描述】:
我正在学习 mongodb,基本上我有一个简单的 spring boot 应用程序,它连接到 mongo db 以保存信息。
我的应用属性如下:
spring.data.mongodb.port=27017
spring.data.mongodb.database=emailDb
spring.data.mongodb.username=admin-user123
spring.data.mongodb.password=admin-password123
spring.data.mongodb.authentication-database=admin
所以我创建了一个 docker-compose 文件来将数据库与我的 Spring Boot 应用程序链接起来:
version: '3.2'
volumes:
mongodb_data: #creates mount point on docker for mongodb
driver: local
# config postgres, Keycloak & Mongodb
services:
servicel-component:
image: servicel-component
networks:
test:
aliases:
- email
environment:
SPRING_PROFILES_ACTIVE: message
SPRING_RABBITMQ_HOST: rabbitmq
ports:
- 8080:8080 # port for postgres
depends_on:
- rabbitmq
rabbitmq:
image: rabbitmq:3-management
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- "5672:5672"
- "15672:15672"
networks:
test:
aliases:
- rabbitmq
mongodb:
image: mongo:latest
networks:
test:
aliases:
- mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: admin-user123
MONGO_INITDB_ROOT_PASSWORD: admin-password123
restart: always
ports:
- 27017:27017
volumes:
- mongodb_data:/data/db
networks:
test:
external: true
当你执行 docker-compose up 时会触发以下异常:
2020-08-07 09:35:23.063 INFO 1 --- [ main] org.mongodb.driver.cluster : Adding discovered server localhost:27017 to client view of cluster
2020-08-07 09:35:23.143 INFO 1 --- [localhost:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-3.11.2.jar!/:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.2.jar!/:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar!/:na]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
Caused by: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:589) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:648) ~[na:na]
at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.11.2.jar!/:na]
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-3.11.2.jar!/:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-3.11.2.jar!/:na]
... 3 common frames omitted
当我不在 docker 上运行 servicel-component 时,只需将其作为 mvn spring-boot:run 运行并在 docker 上运行 mongodb 即可。 知道我在这里缺少什么吗?
【问题讨论】:
-
在 docker 之外,您还没有在该端口上运行 mongo 吗?
-
感谢回复,我只有一个运行在 docker 上的 mongo
标签: spring mongodb spring-boot