enter code here我有我的and应用程序和h2database作为docker容器。我已经把docker compose yml文件设置好了。现在,我需要初始化这个数据库( h2database)。但我不能这样做。当我进入h2database docker容器时,我在这个initdb.sh中看到了docker-entrypoint-initdb.d/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"但是,当我尝试使用bash命令执行这个initdb.sh时,它给出了错误:找不到或加载主类org.h2.tools.RunScript
我已经尝试了所有可能的类路径组合,还下载了不同的h2 jarfiles压缩文件夹,还检查了h2srcmainorgh2Tools下的RunScript文件及其在那里。所以我不明白这里的问题是什么。
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:现在,当我运行/App1/BasePl/sql-scripts/h2/common-scripts/BasePl-schema-h2.sql -compose命令时,将创建initdb,因此我需要进入数据库(Db)容器中的initdb.sh位置,然后将我的脚本#!/bin/bash java -cp h2-1.4.190.jar org.h2.tools.RunScript \ -script jdbc\ -url "jdbc:h2:http://localhost/code1/Demo2./BasePl“。那么我如何将我桌面上的h2-1.4.190.jar文件放到数据库(Db)容器中的那个位置。我想要的就是在docker compose期间通过运行一个脚本来填充(初始化) docker数据库。我是码头新手所以请帮帮我
发布于 2019-06-28 10:07:49
这个错误意味着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中找到jar,而不是在docker-entrypoint-initdb.d中。例如,如果WORKDIR为/root/,那么它将尝试在/root中查找h2-1.4.190.jar,而不是在存储脚本的文件夹中,因此您无法找到jar。
要克服这一点,您可以在dockerfile中更改WORKDIR,或者直接在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"dir=$(dirname "$0")将确保它是当前运行脚本的同一文件夹,而不是启动脚本的文件夹。
另外,你可以为h2-1.4.190.jar使用绝对目录,这也是可以的。
https://stackoverflow.com/questions/56792957
复制相似问题