无法从Spring Boot连接到Dockerized MongoDb实例



我有一个停靠的MongoDB实例。我正试图让Spring Boot连接到它,但在启动Spring Boot时,我收到了一条错误消息。

请在下面找到详细信息。

错误消息:

com.mongodb.MongoSocketException: mongodb://localhost:27017/airbnb-data
at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:211) ~[mongodb-driver-core-3.11.1.jar:na]
at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:75) ~[mongodb-driver-core-3.11.1.jar:na]
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-3.11.1.jar:na]
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.1.jar:na]
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.1.jar:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_281]
Caused by: java.net.UnknownHostException: mongodb://localhost:27017/airbnb-data
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_281]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929) ~[na:1.8.0_281]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324) ~[na:1.8.0_281]
at java.net.InetAddress.getAllByName0(InetAddress.java:1277) ~[na:1.8.0_281]
at java.net.InetAddress.getAllByName(InetAddress.java:1193) ~[na:1.8.0_281]
at java.net.InetAddress.getAllByName(InetAddress.java:1127) ~[na:1.8.0_281]
at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:203) ~[mongodb-driver-core-3.11.1.jar:na]

Spring Boot应用程序中的application.properties:

spring.data.mongodb.uri=mongodb://localhost:27017/airbnb-data
spring.data.mongodb.port=27017
spring.data.mongodb.database=airbnb-data
spring.data.mongodb.host=localhost
spring.data.mongodb.username=mongodbuser
spring.data.mongodb.password=mongodbpwd

启动MongoDB实例的docker-compose.yml:

version: '3'
services:
mongoex:
image: mongo-express
environment:
ME_CONFIG_OPTIONS_EDITORTHEME: ambiance
ME_CONFIG_MONGODB_SERVER: mongodb
ME_CONFIG_MONGODB_PORT: 27017
ME_CONFIG_MONGODB_ENABLE_ADMIN: "true"
ME_CONFIG_MONGODB_ADMINUSERNAME: mongodbuser
ME_CONFIG_MONGODB_ADMINPASSWORD: mongodbpwd
ME_CONFIG_MONGODB_AUTH_DATABASE: admin
ME_CONFIG_MONGODB_AUTH_USERNAME: mongodbuser
ME_CONFIG_MONGODB_AUTH_PASSWORD: mongodbpwd
ME_CONFIG_BASICAUTH_USERNAME: mongoexuser
ME_CONFIG_BASICAUTH_PASSWORD: mongoexpwd
ports:
- "8081:8081"
links:
- mongodb
networks:
- backend
- frontend
mongodb:
image: mongo:latest
container_name: mongodb
restart: unless-stopped
command: mongod --auth
environment:
MONGO_INITDB_ROOT_USERNAME: mongodbuser
MONGO_INITDB_ROOT_PASSWORD: mongodbpwd
MONGODB_DATA_DIR: /data/db
MONDODB_LOG_DIR: /dev/null
ports:
- "27017:27017"
volumes:
- mongodbdata:/data/db
networks:
- backend
- frontend
networks:
frontend:
driver: bridge
backend:
driver: bridge
volumes:
mongodbdata:
driver: local

DataConfig类:

@Configuration
public class DatabaseConfig extends AbstractMongoConfiguration {
@Value("${spring.data.mongodb.myuri}")
private String mongoDbUrl;
@Value("${spring.data.mongodb.port}")
private String port;
@Value("${spring.data.mongodb.database}")
private String mongoDbName;
/**
* Url to mongo db
* 
* @return a string representing the url of bdd
* @throws MalformedURLException
*/

@Override
public MongoClient mongoClient() {
return new MongoClient(this.mongoDbUrl, Integer.parseInt(this.port));
}


@Override
public @Bean MongoTemplate mongoTemplate() throws Exception {
MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory()),
new MongoMappingContext());
converter.setMapKeyDotReplacement("\+");
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter);
return mongoTemplate;
}
@Override
protected String getDatabaseName() {
return this.mongoDbName;
}
/**
* Access to Mongo db
* 
* @return link to db
* @throws Exception
*
* @Bean public MongoTemplate accessBddMongo() throws Exception { return new
*       MongoTemplate(bddGetEndpointUrl(), mongoDbName); }
*/
}

感谢您的帮助

我意识到我不需要在DataConfig类中设置mongoClient((方法。修改后,我有:

@Override
public MongoClient mongoClient() {
return new MongoClient();
}

已解决