3 votes

Emulateur Firestore échoue à démarrer lorsqu'il est exécuté à l'intérieur du conteneur Docker

Je lance une image docker basée sur alpine qui a nodejs et openjdk8 installés. Après avoir installé avec succès firebase-tools via npm et essayé de démarrer l'émulateur firestore en utilisant cette commande:

firebase serve --only firestore

Je reçois l'erreur suivante:

      firestore: Exception dans le fil "main"
      firestore: java.io.IOException: Échec de la liaison

      firestore:   à io.grpc.netty.NettyServer.start(NettyServer.java:256)
            à io.grpc.internal.ServerImpl.start(ServerImpl.java:167)
            à io.grpc.internal.ServerImpl.start(ServerImpl.java:81)
            à io.gapi.emulators.grpc.GrpcServer.start(GrpcServer.java:151)
            à com.google.cloud.datastore.emulator.firestore.CloudFirestore.main(CloudFirestore.java:69)
    Caused by: java.net.SocketException: Famille de protocoles indisponible
            à sun.nio.ch.Net.bind0(Native Method)
            à sun.nio.ch.Net.bind(Net.java:433)
            à sun.nio.ch.Net.bind(Net.java:425)
            à sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)

      firestore:   à io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:130)
            à io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:562)
            à io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1358)
            à io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)
            à io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)
            à io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:1019)
            à io.netty.channel.AbstractChannel.bind(AbstractChannel.java:258)
            à io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:366)
            à io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)

      firestore:   à io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
            à io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:474)
            à io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:909)
            à io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
            à java.lang.Thread.run(Thread.java:748)

J'ai essayé de définir les JAVA_OPTS comme suit:

export JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true"

Mais je continue d'obtenir une erreur similaire:

      firestore: Exception dans le fil "main"
      firestore: java.io.IOException: Échec de la liaison
            à io.grpc.netty.NettyServer.start(NettyServer.java:256)
            à io.grpc.internal.ServerImpl.start(ServerImpl.java:167)
            à io.grpc.internal.ServerImpl.start(ServerImpl.java:81)
            à io.gapi.emulators.grpc.GrpcServer.start(GrpcServer.java:151)
            à com.google.cloud.datastore.emulator.firestore.CloudFirestore.main(CloudFirestore.java:69)
    Caused by: java.net.SocketException: Famille de protocoles indisponible
            à sun.nio.ch.Net.bind0(Native Method)
            à sun.nio.ch.Net.bind(Net.java:433)
            à sun.nio.ch.Net.bind(Net.java:425)
            à sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
            à io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:130)
            à io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:562)
            à io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1358)
            à io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501)
            à io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486)
            à io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:1019)
            à io.netty.channel.AbstractChannel.bind(AbstractChannel.java:258)
            à io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:366)
            à io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
            à io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
            à io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:474)
            à io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:909)
            à io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
            à java.lang.Thread.run(Thread.java:748)

Est-ce que quelqu'un a déjà vu cette erreur et a trouvé une solution?

4voto

raiglstorfer Points 1118

La solution est simple, bien que je dois admettre que cela n'a pas beaucoup de sens, est d'exécuter le JAR directement et de ne pas le démarrer via l'outil firebase.

java -jar $HOME/.cache/firebase/emulators/cloud-firestore-emulator-v1.3.0.jar --host=127.0.0.1

0voto

pedro mg Points 1

Est-ce qu'il essaie de se lier à une adresse IPV6 ? Pour utiliser un port personnalisé avec IPV4 avec Google Cloud SDK :

gcloud beta emulators firestore start --host-port=127.0.0.1:8772

Sinon, essayez de activer IPV6 sur votre docker ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X