366 words
2 minutes
Include Video in the Posts

El Problema de Java Google cloud y docker#

Problema

conseguir un jar listo para ser contenido en un docker, capaz de conectarse a una base de datos cloud sql, para luego ir a cloud register y crear algo con kubermates.

Ejecución en local, uno puede poner el path de las credenciales de servicio que tengan cliente sql dentro de de application.properties. y así conseguir una conexión local.

spring.datasource.username=user
spring.datasource.password=pass
spring.jpa.hibernate.ddl-auto=update
spring.cloud.gcp.sql.database-name=base
spring.cloud.gcp.sql.instance-connection-name=projec-it:us-central1:instancia-sql
#spring.cloud.gcp.sql.credentials.location=file:./src/main/resources/key.json
#spring.cloud.gcp.sql.credentials.location=file:key.json

Estrategía de las credenciales u cualquier otro archivo.#

  1. hacer que tome el archivo ??

  2. crear variable desde el contenedor.


El objetivo es empaquetar el jar para que pueda ser contenido.

  1. funciona en local

mvn spring-boot

ok funciona ! si hay conexión, como compilo significa que paso las pruebas y si hay conexión.

  1. funciona al compilar y empaquetar el jar=

mvn clean package :

No ni siquiera compila no hay conexión con la base. no encuentra las credenciales. ya que las busca en la computadora, como absoluta, sin embargo necesito que busque adentro del .jar porque si estan adentro.

  1. claasspath ayuda

No funciona, funcionaría con otra propiedad pero no en spring al parecer hay un bug, relacionado a la biblioteca no puede leer desde adentro

https://github.com/spring-cloud/spring-cloud-gcp/issues/339

Opciones reales para la credencial de servicio.

  1. Opciones: leer desde local

¿Que tal si apunto a un ruta afuera del jar donde ya se que va a estar el archivo?

spring.cloud.gcp.sql.credentials.location=file.json

Vale entonces compilo saltandome las pruebas para que no de error

mvn package -DskipTests

coloco el archivo key.json justo en mi raiz,

/key.json

/target/name-spring-app.jar

Ejecuto

java -jar target/name-spring-app.jar

Funciona encontró las credenciales y ya esta empquetado, ahora tengo que hacer un docker para que tenga sentido.

FROM openjdk:14-slim-buster
COPY ./target/gae-gnp-covid-0.0.1-SNAPSHOT.jar /usr/src/app/app.jar
COPY ./src/main/resources/key.json /usr/src/app/key.json
WORKDIR /usr/src/app
ENTRYPOINT java -jar app.jar

y al crear y ejecutar el docker

docker build -t app_java .
docker run -it -p 8080:8080 java_app

Funciona si tiene conexión aunque tuve algunas advertencias quizá no es la mejor manera aún

  1. bueno crear variable de google auth. que tome la default y ya esta.

Eliminar la línea de cuenta de servicio para que tome la default en el sistema significa que debe haber una default hay que guardarla en algún lugar el contenedor y expornter la variable de ambiente.

FROM openjdk:14-slim-buster
COPY ./target/gae-gnp-covid-0.0.1-SNAPSHOT.jar /usr/src/app/app.jar
COPY ./src/main/resources/key.json /usr/src/app/key.json
ENV GOOGLE_APPLICATION_CREDENTIALS="/usr/src/app/key.json"
WORKDIR /usr/src/app
ENTRYPOINT java -jar app.jar

Ahora como lo mando a kubernates.#

Comando para crear el cluster 1 nodo qa.

¿Como entrar al contenedor?

Include Video in the Posts
https://fuwari.vercel.app/posts/el-problema-de-java-google-cloud-y-docker/
Author
Polito al rescate
Published at
2025-06-01
License
CC BY-NC-SA 4.0