Versuchen Sie, mit Java eine Verbindung zu AzureCosmosDB Emulator for Docker herzustellen

Einführung

Ich habe versucht, den AzureCosmosDB-Emulator zu verwenden, bin aber süchtig danach, daher hinterlasse ich eine Notiz. AzureCosmosDB für Docker ist nur in Docker für Windows verfügbar.

Starten Sie den AzureCosmosDB-Emulator

Ich habe an meinen Augen gezweifelt, aber ich habe 6 GB ... Wenn Sie es in einem gemeinsam genutzten NW tun, tun Sie es nachts.

docker pull microsoft/azure-cosmosdb-emulator

Erstellen Sie ein Verzeichnis

md %LOCALAPPDATA%\CosmosDBEmulator\bind-mount

anfangen

docker run --name azure-cosmosdb-emulator --memory 2GB --mount "type=bind,source=%LOCALAPPDATA%\CosmosDBEmulator\bind-mount,destination=C:\CosmosDB.Emulator\bind-mount" --interactive --tty -p 8081:8081 -p 8900:8900 -p 8901:8901 -p 8902:8902 -p 10250:10250 -p 10251:10251 -p 10252:10252 -p 10253:10253 -p 10254:10254 -p 10255:10255 -p 10256:10256 -p 10350:10350 microsoft/azure-cosmosdb-emulator

Hier tritt ein Fehler auf

docker: Error response from daemon: failed to create endpoint azure-cosmosdb-emulator on network nat: HNS failed with error :Der Prozess kann nicht auf die Datei zugreifen. Ein anderer Prozess wird verwendet..

Zuerst verstand ich es überhaupt nicht, aber es schien, dass es mit dem Port auf der Hostseite bedeckt war (in meinem Fall Makafi), und es funktionierte gut, indem die Porteinstellung geändert wurde, wenn Docker ausgeführt wurde.

Wenn es erfolgreich gestartet wird, befindet es sich im Powershell-Modus und wird ausgegeben. ** Bitte beachten Sie, dass der Docker gestoppt wird, wenn Sie den Powershell-Modus abbrechen. ** ** **

Key   : GremlinEndpoint
Value : {http://bd876a98b564:8901/, http://172.30.166.171:8901/}
Name  : GremlinEndpoint


Key   : TableEndpoint
Value : {https://bd876a98b564:8902/, https://172.30.166.171:8902/}
Name  : TableEndpoint


Key   : Key
Value : C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
Name  : Key


Key   : Version
Value : 2.4.5.0
Name  : Version


Key   : IPAddress
Value : 172.30.166.171
Name  : IPAddress


Key   : Emulator
Value : CosmosDB.Emulator
Name  : Emulator


Key   : CassandraEndpoint
Value : {tcp://bd876a98b564:10350/, tcp://172.30.166.171:10350/}
Name  : CassandraEndpoint


Key   : MongoDBEndpoint
Value : {mongodb://bd876a98b564:10255/, mongodb://172.30.166.171:10255/}
Name  : MongoDBEndpoint


Key   : Endpoint
Value : {https://bd876a98b564:8081/, https://172.30.166.171:8081/}
Name  : Endpoint

Zertifikat importieren

Importieren Sie das Zertifikat auf den Host. Wenn Sie dieses Verfahren nicht befolgen, können Sie mit Ihrem Browser keine Verbindung zum Verwaltungsbildschirm herstellen.

C:\Users\xxxx\AppData\Local\CosmosDBEmulator\bind-mount>powershell .\importcert.ps1

Importing self-signed certificate generated by the Azure Cosmos DB Emulator runnning in container a9ed9a9e172b to the certificate store on XXXXXX

Versuchen Sie, eine Verbindung zum Explorer herzustellen

Sie können eine WEB-Konsole öffnen, die genau wie der Daten-Explorer von Azure Cosmos DB aussieht. Versuchen Sie, auf die Adresse + _explorer / index.html zuzugreifen, die im vorherigen Protokoll als Endpunkt ausgegeben wurde.

https://172.30.166.177:8081/_explorer/index.html

Es ist in Ordnung, wenn ein solcher Bildschirm angezeigt wird.

image.png

Stellen Sie von Java aus eine Verbindung zum Cosmos DB-Emulator her

Wenn ich versuche, mit Java eine Verbindung zu CosmosDB herzustellen, wird der folgende Fehler angezeigt:

[pool-1-thread-1] ERROR com.microsoft.azure.documentdb.DocumentClient$DocumentDBThreadPoolExecutor  - Runnable execution exception
java.lang.IllegalStateException: com.microsoft.azure.documentdb.DocumentClientException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at com.microsoft.azure.documentdb.internal.routing.ClientCollectionCache.readCollection(ClientCollectionCache.java:35)
	at com.microsoft.azure.documentdb.internal.routing.ClientCollectionCache.getByName(ClientCollectionCache.java:41)
	at com.microsoft.azure.documentdb.internal.routing.CollectionCache$4.call(CollectionCache.java:148)
	at com.microsoft.azure.documentdb.internal.routing.CollectionCache$4.call(CollectionCache.java:145)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: com.microsoft.azure.documentdb.DocumentClientException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at com.microsoft.azure.documentdb.internal.GatewayProxy.performGetRequest(GatewayProxy.java:252)
	at com.microsoft.azure.documentdb.internal.GatewayProxy.doRead(GatewayProxy.java:93)
	at com.microsoft.azure.documentdb.internal.GatewayProxy.processMessage(GatewayProxy.java:371)
	at com.microsoft.azure.documentdb.DocumentClient$8.apply(DocumentClient.java:3102)
	at com.microsoft.azure.documentdb.internal.RetryUtility.executeDocumentClientRequest(RetryUtility.java:72)
	at com.microsoft.azure.documentdb.DocumentClient.doRead(DocumentClient.java:3108)
	at com.microsoft.azure.documentdb.DocumentClient.readCollection(DocumentClient.java:746)
	at com.microsoft.azure.documentdb.internal.routing.ClientCollectionCache.readCollection(ClientCollectionCache.java:33)
	... 7 more

Das Zertifikat wurde im Verfahren "Zertifikat importieren" auf den Host importiert, es scheint jedoch ein Fehler zu sein, da sich das Zertifikat nicht im Java KeyStore befindet.

Exportieren Sie das Zertifikat

Es gibt kein Problem mit der Prozedur unter der folgenden URL.

https://docs.microsoft.com/ja-jp/azure/cosmos-db/local-emulator-export-ssl-certificates

Importieren Sie das Zertifikat

Wechseln Sie in das Verzeichnis% JAVA_HOME% / lib / security.

Fügen Sie das Zertifikat dem Keystore hinzu.

keytool -keystore cacerts -importcert -alias documentdbemulatorcert -file documentdbemulatorcert.cer
Bitte geben Sie das Keystore-Passwort ein:changeit
Inhaber: CN=localhost
Der Emittent: CN=localhost
Ordnungsnummer: 2fe969231bd7868a419cdc4067fb931a
Gültigkeitsbeginn: Tue Jul 23 09:27:31 GMT+09:00 2019 Enddatum: Sun Jul 21 09:27:31 GMT+09:00 2024
Zertifikat Fingerabdruck:
         SHA1: 3F:32:E0:2E:31:32:2E:C3:1B:29:11:82:F1:7B:01:21:31:A6:5D:99
         SHA256: 12:2D:B9:6A:38:44:DB:04:00:B9:AB:8E:35:A8:89:76:AD:18:0C:45:AE:01:42:3F:E6:5E:F8:21:80:53:AF:47
Name des Signaturalgorithmus: SHA1withRSA
Betreff Public-Key-Algorithmus:1024-Bit-RSA-Schlüssel
Ausführung: 3

Erweiterung:

#1: ObjectId: 2.5.29.17 Criticality=true
SubjectAlternativeName [
  DNSName: a9ed9a9e172b
  DNSName: localhost
  IPAddress: 172.30.166.177
  IPAddress: 127.0.0.1
  DNSName: 172.30.166.177
  DNSName: 127.0.0.1
]

Vertrauen Sie diesem Zertifikat?[Nein]:  y
Zertifikat zum Keystore hinzugefügt

Stellen Sie sicher, dass das Zertifikat erfolgreich importiert wurde

keytool -list -keystore cacerts

[Referenz] Löschen Sie das Zertifikat

keytool -delete -keystore cacerts -alias documentdbemulatorcert

abschließend

Das lokale Einspielen von 2G-Ressourcen und das Hinzufügen zum Zertifikatsexport / Keystore sind ziemlich umständlich, daher habe ich mir Sorgen gemacht, es so zu verwenden, wie es ist ...

Recommended Posts

Versuchen Sie, mit Java eine Verbindung zu AzureCosmosDB Emulator for Docker herzustellen
[Java] So testen Sie, ob es in JUnit null ist
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Versuchen Sie, TCP / IP + NIO mit JAVA zu implementieren
Docker Container Operations mit Docker-Client API für Java
Versuchen Sie, mit JDK6 (Java) + JDBC OCI-Treiber (Typ 2) eine Verbindung zur autonomen Datenbank herzustellen.
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Initialisierung von for Versuchen Sie, das Java-Problem in TypeScript 5-4 zu ändern
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Befehl, um Docker vorerst zu verwenden
Java zum Spielen mit Function
Versuchen Sie eine DB-Verbindung mit Java
Versuchen Sie gRPC mit Java, Maven
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
Untersucht, wie Dienste mit Watson SDK für Java aufgerufen werden
Installieren Sie Java mit Ubuntu 16.04 Docker
Java mit Ramen lernen [Teil 1]
Umgebungsbau mit Docker für Anfänger
[Java] Mit Arrays.asList () zu beachtende Punkte
Verwandeln Sie Java-Anwendungen mit Jib ganz einfach in Docker
Versuchen Sie, den Cloudera Manager mit Docker auszuführen
Wagen Sie es, Kaggle mit Java herauszufordern (1)
Versuchen Sie, den Start von Java-Konsolenprogrammen mit dem nativen Image von GraalVM zu beschleunigen
Versuchen Sie es mit Redis mit Java (jar)
Aktivieren Sie OpenCV mit Java8. (Für mich)
Führen Sie logstash mit Docker aus und versuchen Sie, Daten in Elastic Cloud hochzuladen
Ich habe versucht, mit Java zu interagieren
Herstellen einer Verbindung zu einer Datenbank mit Java (Teil 1) Möglicherweise die grundlegende Methode
[Für Anfänger] Mindestbeispiel zum Aktualisieren von RecyclerView mit DiffUtils in Java
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie, die öffentliche Java-Methode zu extrahieren
Versuchen Sie die bidirektionale Kommunikation mit gRPC Java
Versuchen Sie, Yuma in Java zu implementieren
Java, Arrays für Anfänger
Aktualisieren Sie MySQL mit Docker von 5.7 auf 8.0
So starten Sie Camunda mit Docker
[Für diejenigen, die Portfolios erstellen] Verwendung von binding.pry mit Docker
Warten Sie, bis PostgreSQL mit Docker gestartet ist, und starten Sie dann den WEB-Dienst
[Java] So drehen Sie ein zweidimensionales Array mit einer erweiterten for-Anweisung
Grundlagen der Java-Programmierung - Ich möchte ein Dreieck mit einer for-Anweisung ① anzeigen
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
Grundlagen der Java-Programmierung - Ich möchte ein Dreieck mit einer for-Anweisung ② anzeigen
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
Schnittstelle Versuchen Sie, Java-Problem TypeScript 7-3 zu machen
So teilen Sie Dateien mit Docker Toolbox
Versuchen Sie, Project Euler in Java zu lösen
So kompilieren Sie Java mit VsCode & Ant
Erste Schritte mit Ruby für Java-Ingenieure