0

I'm making a Java application which will connect to a Firestore db on GCP to do some data read and write, it all worked well if I build and run with mvn, but when I build it into a Docker container, instantiating the Firestore instance will throw error

java.lang.IllegalArgumentException: Address types of NameResolver 'unix' for 'firestore.googleapis.com:443' not supported by transport

This is how my code looks like

String serviceAccountPath = "path to a json";

Credentials credentials;
try (FileInputStream serviceAccountStream = new FileInputStream(serviceAccountPath)) {
  credentials = GoogleCredentials.fromStream(serviceAccountStream);
}

firestore = FirestoreOptions.newBuilder()
  .setProjectId("project id")
  .setDatabaseId("my db name")
  .setCredentials(credentials)
  .setTransportOptions(
    FirestoreOptions.getDefaultTransportOptionsBuilder().build()
  )
  .build()
  .getService();

This is my Dockerfile

FROM maven:3.8.4-jdk-11

# Set the working directory to /
WORKDIR /

# Copy the Java source code into the container
COPY . /

ENV GRPC_DNS_RESOLVER="dns"
ENV GRPC_DEFAULT_SSL_PROVIDER="netty"
ENV GRPC_DEFAULT_TRANSPORT="netty"

RUN mvn compile 
RUN mvn package compile

# Expose the gRPC port
EXPOSE 50051
EXPOSE 443

# Run the gRPC service when the container starts
CMD ["java","-Dio.grpc.netty.shaded.io.netty.transport.noNative=false", "-jar", "target/Backend-1.0-SNAPSHOT-jar-with-dependencies.jar"]

Again, this all worked if I run it on my Mac with mvn, but it is just not working with Docker.

1 Answer 1

0

It turns out I didn't use the correct CMD to start the server, replaced with

CMD ["mvn", "exec:java", "-Dexec.mainClass={mymainclass}"]

then it just worked the same way as localhost.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.