Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java

introduction

J'ai essayé d'utiliser l'émulateur AzureCosmosDB, mais j'y suis accro, je vais donc laisser une note. AzureCosmosDB pour Docker est uniquement disponible à partir de Docker pour Windows.

Lancer l'émulateur AzureCosmosDB

J'ai douté de mes yeux, mais j'ai 6 Go ... Si vous le faites sur un NW partagé, faites-le la nuit.

docker pull microsoft/azure-cosmosdb-emulator

Créer un annuaire

md %LOCALAPPDATA%\CosmosDBEmulator\bind-mount

commencer

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

Une erreur se produit ici

docker: Error response from daemon: failed to create endpoint azure-cosmosdb-emulator on network nat: HNS failed with error :Le processus ne peut pas accéder au fichier. Un autre processus est en cours d'utilisation..

Au début, je ne comprenais pas du tout, mais il semblait qu'il était recouvert du port côté hôte (Makafi dans mon cas), et cela fonctionnait bien en changeant le paramètre du port lorsque le docker fonctionnait.

S'il démarre correctement, il sera en mode PowerShell et ce sera affiché. ** Veuillez noter que si vous annulez le mode PowerShell, le docker sera arrêté. ** **

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

Certificat d'importation

Importez le certificat sur l'hôte. Si vous ne suivez pas cette procédure, vous ne pourrez pas vous connecter à l'écran de gestion avec votre navigateur.

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

Essayez de vous connecter à Explorer

Vous pouvez ouvrir une console WEB qui ressemble exactement à l'explorateur de données d'Azure Cosmos DB. Essayez d'accéder à l'adresse + _explorer / index.html qui est sorti en tant que point de terminaison dans le journal précédent.

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

C'est OK si un tel écran apparaît.

image.png

Connectez-vous à l'émulateur Cosmos DB depuis Java

Lorsque j'essaye de me connecter à CosmosDB avec Java, j'obtiens l'erreur suivante:

[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

Le certificat a été importé vers l'hôte par la procédure "Importer le certificat", mais cela semble être une erreur car le certificat ne se trouve pas dans le Java KeyStore.

Exporter le certificat

Il n'y a aucun problème avec la procédure à l'URL suivante.

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

Importez le certificat

Accédez au répertoire% JAVA_HOME% / lib / security.

Ajoutez le certificat au keystore.

keytool -keystore cacerts -importcert -alias documentdbemulatorcert -file documentdbemulatorcert.cer
Veuillez saisir le mot de passe du fichier de clés:changeit
propriétaire: CN=localhost
Émetteur: CN=localhost
Numéro de série: 2fe969231bd7868a419cdc4067fb931a
Date de début de validité: Tue Jul 23 09:27:31 GMT+09:00 2019 date de fin: Sun Jul 21 09:27:31 GMT+09:00 2024
Empreinte digitale du certificat:
         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
Nom de l'algorithme de signature: SHA1withRSA
Algorithme de clé publique du sujet:Clé RSA 1024 bits
version: 3

Expansion:

#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
]

Faites-vous confiance à ce certificat?[Non]:  y
Certificat ajouté au keystore

Assurez-vous que le certificat a été importé avec succès

keytool -list -keystore cacerts

[Référence] Supprimer le certificat

keytool -delete -keystore cacerts -alias documentdbemulatorcert

en conclusion

Apporter des ressources 2G localement et ajouter à l'exportation de certificat / Keystore est plutôt fastidieux, donc je craignais de l'utiliser tel quel ...

Recommended Posts

Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java
[Java] Comment tester s'il est nul dans JUnit
Essayez d'intégrer Ruby et Java avec Dapr
Essayez d'implémenter TCP / IP + NIO avec JAVA
Opérations de conteneur Docker avec l'API Docker-Client pour Java
Essayez de vous connecter à la base de données autonome avec JDK6 (Java) + pilote JDBC OCI (type 2).
Paramètres de connexion à MySQL avec Spring Boot + Spring JDBC
Comment créer un environnement Docker avec Gradle pour IntelliJ
Initialisation de for Essayez de changer le problème Java en TypeScript 5-4
Essayez de créer un environnement de développement Java à l'aide de Docker
Commande pour essayer d'utiliser Docker pour le moment
Java pour jouer avec Function
Essayez la connexion DB avec Java
Essayez gRPC avec Java, Maven
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Essayez Spark Submit to EMR à l'aide du kit AWS SDK pour Java
A étudié comment appeler des services avec Watson SDK pour Java
Installer Java avec Docker basé sur Ubuntu 16.04
Java pour apprendre avec les ramen [Partie 1]
Construction d'environnement avec Docker pour les débutants
[Java] Points à noter avec Arrays.asList ()
Transformez facilement les applications Java en Docker avec Jib
Essayez d'exécuter cloudera manager avec docker
Osez défier Kaggle avec Java (1)
Essayez d'accélérer le démarrage des programmes de console Java avec l'image native de GraalVM
Essayez d'utiliser Redis avec Java (jar)
Activez OpenCV avec java8. (Pour moi-même)
Exécutez logstash avec Docker et essayez de télécharger des données sur Elastic Cloud
J'ai essayé d'interagir avec Java
Connexion à une base de données avec Java (partie 1) Peut-être la méthode de base
[Pour les débutants] Exemple minimum pour mettre à jour RecyclerView avec DiffUtils en Java
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'extraire la méthode publique de java
Essayez la communication bidirectionnelle avec gRPC Java
Essayez d'implémenter Yuma en Java
Java, des tableaux pour débuter avec les débutants
Mettre à jour MySQL de 5.7 à 8.0 avec Docker
Comment démarrer Camunda avec Docker
[Pour ceux qui créent des portefeuilles] Comment utiliser binding.pry avec Docker
Attendez que PostgreSQL démarre avec Docker, puis démarrez le service WEB
[Java] Comment transformer un tableau à deux dimensions avec une instruction for étendue
Pratique des bases de la programmation Java - Je veux afficher un triangle avec une instruction for ①
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
Pratique des bases de la programmation Java - Je veux afficher un triangle avec une instruction for ②
Créer un environnement de développement d'applications Web Java avec Docker pour Mac Part2
Interface Essayez de créer un problème Java TypeScript 7-3
Comment partager des fichiers avec Docker Toolbox
Essayez de résoudre Project Euler en Java
Comment compiler Java avec VsCode & Ant
Premiers pas avec Ruby pour les ingénieurs Java