#java #mongodb #docker #ssl #tls1.2
Вопрос:
У меня есть сервер на базе Java, работающий в Docker с использованием openjdk:15-jdk-alpine. Он подключается к MongoDB Atlas с помощью драйвера mongodb-driver-reactivestreams. Точно так же у меня есть второй сервер на основе SpringBoot, работающий в Docker, который подключается с использованием тех же учетных данных и работает просто отлично.
Когда я запускаю свой код в IntelliJ, он запускается без ошибок, подключается к MongoDB, и я могу запрашивать, вставлять документы и т. Д…
Когда я помещаю его в контейнер Docker и запускаю сервер, я получаю следующее сообщение об ошибке: Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.mongodb.internal.connection.tlschannel.TlsChannel
Когда я отключаю использование tls tls=false
в строке подключения, я получаю сообщение MongoSocketReadException: Prematurely reached end of stream
.
В обоих случаях, просматривая журнал, я вижу, что сервер смог идентифицировать все фрагменты в моем кластере MongoDB, поэтому он подключается к Mongo Atlas и получает информацию обратно.
Моя текущая теория заключается в том, что 1) Для подключения требуется Tls 2) Tls не работает в моем контейнере docker по какой-то причине, связанной с хранилищем ключей/хранилищем доверия JVM.
Я недостаточно знаю о TLS или хранилище ключей Java, чтобы это отладить, и не знаю, что искать, чтобы получить ответ. Если кто-нибудь сможет указать мне правильное направление, я буду очень признателен…
2021-10-14 17:58:53.730 DEBUG c608e84d3bb5 --- [ main] u.s.PropertiesServiceImpl : Looking for profiles.
2021-10-14 17:58:53.734 INFO c608e84d3bb5 --- [ main] u.s.PropertiesServiceImpl : Profile found: dev
2021-10-14 17:58:53.773 DEBUG c608e84d3bb5 --- [ main] c.p.s.c.SocketAcceptor : Creating server Socket at port: 6666
2021-10-14 17:58:53.788 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Connecting to Redis: localhost/6379
2021-10-14 17:58:53.872 DEBUG c608e84d3bb5 --- [ main] r.u.Loggers : Using Slf4j logging framework
2021-10-14 17:58:54.249 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:54.764 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:55.273 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:55.783 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:56.298 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:56.810 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:57.322 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:57.834 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:58.347 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:58.857 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection failed, retrying...
2021-10-14 17:58:59.358 DEBUG c608e84d3bb5 --- [ main] s.r.s.RedisConnectionImpl : Redis connection could not be established!
2021-10-14 17:58:59.554 DEBUG c608e84d3bb5 --- [ main] .s.r.s.GameControllerImpl : Starting Room Manager
2021-10-14 17:58:59.646 INFO c608e84d3bb5 --- [ main] c.p.s.m.s.MongoDB : Mongodb target is: mongodb srv://XXXXX:XXXXX@XXXXXX.erble.gcp.mongodb.net/xxxxxxx?retryWrites=trueamp;w=majority
2021-10-14 17:58:59.667 DEBUG c608e84d3bb5 --- [ main] c.p.s.m.s.MongoDB : Starting MongoDb database...
2021-10-14 17:58:59.680 INFO c608e84d3bb5 --- [ main] o.m.d.cluster : Cluster created with settings {hosts=[127.0.0.1:27017], srvHost=XXXXXX.erble.gcp.mongodb.net, mode=MULTIPLE, requiredClusterType=REPLICA_SET, serverSelectionTimeout='30000 ms', requiredReplicaSetName='XXXXXX-shard-0'}
2021-10-14 17:58:59.699 DEBUG c608e84d3bb5 --- [ main] c.p.s.m.s.MongoDB : MongoDb client initialised.
2021-10-14 17:58:59.699 DEBUG c608e84d3bb5 --- [ main] c.p.s.m.s.MongoDB : MongoDb client initialised.
2021-10-14 17:58:59.699 DEBUG c608e84d3bb5 --- [ main] c.p.s.Application : Starting server...
2021-10-14 17:58:59.700 DEBUG c608e84d3bb5 --- [ AcceptorThread] c.p.s.c.SocketAcceptor : Starting Socket acceptor loop...
2021-10-14 17:58:59.700 DEBUG c608e84d3bb5 --- [ProcessorThread] c.p.s.c.SocketProcessor : Starting Socket processor loop...
2021-10-14 17:58:59.700 DEBUG c608e84d3bb5 --- [ ReaderThread] c.p.s.c.SocketReader : Starting Socket reader loop...
2021-10-14 17:58:59.701 DEBUG c608e84d3bb5 --- [ WriterThread] c.p.s.c.SocketWriter : Starting Socket writer loop...
2021-10-14 17:58:59.702 DEBUG c608e84d3bb5 --- [ Thread-5] c.p.s.c.MessageReceiver : Starting loop.
2021-10-14 17:58:59.702 DEBUG c608e84d3bb5 --- [ main] c.p.s.m.s.MongoDB : MongoDb client initialised.
2021-10-14 17:58:59.744 INFO c608e84d3bb5 --- [gcp.mongodb.net] o.m.d.cluster : Adding discovered server XXXXXX-shard-00-01.erble.gcp.mongodb.net:27017 to client view of cluster
2021-10-14 17:58:59.766 INFO c608e84d3bb5 --- [gcp.mongodb.net] o.m.d.cluster : Adding discovered server XXXXXX-shard-00-02.erble.gcp.mongodb.net:27017 to client view of cluster
2021-10-14 17:58:59.768 INFO c608e84d3bb5 --- [gcp.mongodb.net] o.m.d.cluster : Adding discovered server XXXXXX-shard-00-00.erble.gcp.mongodb.net:27017 to client view of cluster
2021-10-14 17:58:59.770 DEBUG c608e84d3bb5 --- [gcp.mongodb.net] o.m.d.cluster : Updating cluster description to {type=REPLICA_SET, servers=[{address=XXXXXX-shard-00-00.erble.gcp.mongodb.net:27017, type=UNKNOWN, state=CONNECTING}, {address=XXXXXX-shard-00-01.erble.gcp.mongodb.net:27017, type=UNKNOWN, state=CONNECTING}, {address=XXXXXX-shard-00-02.erble.gcp.mongodb.net:27017, type=UNKNOWN, state=CONNECTING}]
2021-10-14 17:59:00.093 DEBUG c608e84d3bb5 --- [ngodb.net:27017] o.m.d.connection : Closing connection connectionId{localValue:6}
2021-10-14 17:59:00.093 DEBUG c608e84d3bb5 --- [ngodb.net:27017] o.m.d.connection : Closing connection connectionId{localValue:2}
2021-10-14 17:59:00.094 DEBUG c608e84d3bb5 --- [ngodb.net:27017] o.m.d.connection : Closing connection connectionId{localValue:5}
2021-10-14 17:59:00.095 DEBUG c608e84d3bb5 --- [ngodb.net:27017] o.m.d.connection : Closing connection connectionId{localValue:3}
2021-10-14 17:59:00.095 DEBUG c608e84d3bb5 --- [ngodb.net:27017] o.m.d.connection : Closing connection connectionId{localValue:1}
2021-10-14 17:59:00.096 DEBUG c608e84d3bb5 --- [ngodb.net:27017] o.m.d.connection : Closing connection connectionId{localValue:4}
2021-10-14 17:59:00.095 INFO c608e84d3bb5 --- [ngodb.net:27017] o.m.d.cluster : Exception in monitor thread while connecting to server XXXXXX-shard-00-00.erble.gcp.mongodb.net:27017
com.mongodb.MongoInternalException: Opening the TlsChannelStream failed
at com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.get(AsynchronousChannelStream.java:328)
at com.mongodb.internal.connection.AsynchronousChannelStream$FutureAsyncCompletionHandler.getOpen(AsynchronousChannelStream.java:304)
at com.mongodb.internal.connection.AsynchronousChannelStream.open(AsynchronousChannelStream.java:125)
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:165)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:195)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:151)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.mongodb.internal.connection.tlschannel.TlsChannel
at com.mongodb.internal.connection.tlschannel.TlsChannelBuilder.<init>(TlsChannelBuilder.java:37)
at com.mongodb.internal.connection.tlschannel.ClientTlsChannel$Builder.<init>(ClientTlsChannel.java:45)
at com.mongodb.internal.connection.tlschannel.ClientTlsChannel$Builder.<init>(ClientTlsChannel.java:40)
at com.mongodb.internal.connection.tlschannel.ClientTlsChannel.newBuilder(ClientTlsChannel.java:87)
at com.mongodb.connection.TlsChannelStreamFactoryFactory$TlsChannelStream.lambda$openAsync$0(TlsChannelStreamFactoryFactory.java:236)
at com.mongodb.connection.TlsChannelStreamFactoryFactory$SelectorMonitor.lambda$start$0(TlsChannelStreamFactoryFactory.java:141)
... 1 more
Комментарии:
1. Если под Mongo Cloud вы подразумеваете MongoDB Atlas, то требуется протокол TLS, без которого не будут разрешены подключения.