Ошибка: не удалось найти или загрузить основной класс org.h2.tools.RunScript - PullRequest
0 голосов
/ 27 июня 2019

enter code here У меня есть веб-приложение и h2database в качестве Docker-контейнеров.У меня есть докер составить файл YML все готово.Теперь мне нужно инициализировать эту базу данных (h2database).Но я не могу этого сделать.Когда я захожу в докерский контейнер h2database, я вижу docker-entrypoint-initdb.d / initdb.sh внутри этого initdb.sh, я добавляю свой скрипт

#!/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"

, но когда я пытаюсь выполнить этот initdb.shиспользование команды bash выдает ошибку: не удалось найти или загрузить основной класс org.h2.tools.RunScript

Я перепробовал все возможные комбинации путей к классам, а также загрузил различные zip-папки jarfiles h2, а также проверил наличие файла RunScript.под h2 \ src \ main \ org \ h2 \ tools и его там.Поэтому я не понимаю, в чем здесь проблема.

Error: Could not find or load main class org.h2.tools.RunScript

мой файл 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:

теперь initdb будет создан при запуске команды docker-compose и, следовательно, мне нужно зайти в базу данных (db) контейнер в папку initdb.sh и затем поместите мой скрипт #! / 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". Как я могу поместить файл h2-1.4.190.jar, который находится на моем рабочем столе, в это местовнутри контейнера базы данных (БД). Все, что я хочу, это заполнить (инициализировать) базу данных докера, запустив скрипт против нее во время компоновки докера. Пожалуйста, я новичок в докере, поэтому помогите мне

1 Ответ

0 голосов
/ 28 июня 2019

Эта ошибка означает, что Java не нашел h2-1.4.190.jar.

Сначала вам нужно поместить h2-1.4.190.jar в ту же папку, что и initdb.sh, то есть docker-entrypoint-initdb.d в вашем случае. Тогда в вашем Dockerfile, WORKDIR, я думаю, это не docker-entrypoint-initdb.d.

Затем, когда java -cp h2-1.4.190.jar, он собирается найти банку в WORKDIR, а не в docker-entrypoint-initdb.d. Например. если WORKDIR равно /root/, то он попытается найти h2-1.4.190.jar в /root, а не в папке, в которой хранится скрипт, поэтому вы не сможете найти банку.

Чтобы преодолеть это, вы можете изменить WORKDIR в dockerfile или просто добавить рядом с 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"

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1025* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

Также вы можете использовать абсолютный dir для h2-1.4.190.jar, это тоже нормально.

...