enter code here . Tengo mi aplicación web y h2database como contenedores acoplables. Tengo docker componer archivo yml todo listo. Ahora, necesito inicializar esta base de datos (h2database). Pero soy incapaz de hacerlo. Cuando entro en el contenedor docker h2database, veo docker-entrypoint-initdb.d/initdb.sh dentro de este initdb.sh, he agregado mi script
#!/bin/bash java -cp h2-1.4.190.jar org.h2.tools.RunScript \ -script /App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql \ -url "jdbc:h2:http://localhost/code1/Demo2./BasePl"pero cuando trato de ejecutar este initdb.sh usando el comando bash me da error: No se pudo encontrar o cargar la clase principal org.h2.tools.RunScript
Probé todas las combinaciones posibles de ruta de clase y también descargué diferentes carpetas zip de archivos jar h2 y también verifiqué el archivo RunScript en h2\src\main\org\h2\tools y está allí. Así que no entiendo cuál es el problema aquí.
Error: Could not find or load main class org.h2.tools.RunScriptmi archivo Docker-compose.yml:
version: '3' services: baseplapplication: build: context: . dockerfile: Dockerfile environment: BASEPL_HOME: "/usr/local/BASEPL" ports: - "882:8080" volumes: - basepl_data:/var/bio depends_on: - db links: - db db: image: "buildo/h2database" volumes: - ./dumps/init.sh:/docker-entrypoint-initdb.d/initdb.sh - h2data:/var/lib/h2database ports: - "8082:8082" volumes: basepl_data: h2data:ahora el initdb se creará cuando ejecute el comando docker-compose y, por lo tanto, necesito ingresar al contenedor de la base de datos (db) a la ubicación de initdb.sh y luego colocar mi script #!/bin/bash java -cp h2-1.4 .190.jar org.h2.tools.RunScript \ -script /App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql \ -url "jdbc:h2: http://localhost/ código1/Demo2./BasePl " . ¿Cómo podría entonces poner mi archivo h2-1.4.190.jar que se encuentra en mi escritorio en esa ubicación dentro del contenedor de la base de datos (db)? Todo lo que quiero es llenar (inicializar) la base de datos de la ventana acoplable ejecutando un script contra ella durante la redacción de la ventana acoplable. Por favor, soy nuevo en Docker, así que ayúdenme.
Este error significa que Java no encontró h2-1.4.190.jar .
Primero, debe colocar h2-1.4.190.jar en la misma carpeta de initdb.sh , que es docker-entrypoint-initdb.d en su caso. Luego, en su Dockerfile , supongo que WORKDIR no es docker-entrypoint-initdb.d .
Luego, cuando java -cp h2-1.4.190.jar , intenta encontrar el jar en WORKDIR , no en docker-entrypoint-initdb.d . Por ejemplo, si WORKDIR es /root/ , intentará encontrar h2-1.4.190.jar en /root , no en la carpeta donde se almacena el script, por lo que no podrá encontrar el jar.
Para superar esto, puede cambiar WORKDIR en dockerfile, o simplemente agregar junto a init.db.sh :
#!/bin/bash dir=$(dirname "$0") java -cp "$dir/h2-1.4.190.jar" org.h2.tools.RunScript \ -script /App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql \ -url "jdbc:h2:http://localhost/code1/Demo2./BasePl" El dir=$(dirname "$0") asegurará que es la misma carpeta del script en ejecución actual, no la carpeta donde iniciar el script.
Además, puede usar el directorio absoluto para h2-1.4.190.jar , también está bien.