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.