Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接到Docker容器中的H2数据库_Java_Spring_Maven_Jpa_Docker - Fatal编程技术网

Java 连接到Docker容器中的H2数据库

Java 连接到Docker容器中的H2数据库,java,spring,maven,jpa,docker,Java,Spring,Maven,Jpa,Docker,我有一个基本的Spring Boot数据JPA项目。我连接到的h2数据库位于/tmp/customerdb.h2.db。使用mvn spring boot运行应用程序时:运行一切正常。应用程序连接到数据库,添加记录,并将添加的记录打印到控制台 然后我构建一个docker容器,并运行它。docker文件如下所示: FROM java:8 VOLUME /tmp ADD jpa-docker-1.0.0.jar app.jar RUN bash -c 'touch /app.jar' ENTRYP

我有一个基本的Spring Boot数据JPA项目。我连接到的h2数据库位于
/tmp/customerdb.h2.db
。使用mvn spring boot运行应用程序时:运行一切正常。应用程序连接到数据库,添加记录,并将添加的记录打印到控制台

然后我构建一个docker容器,并运行它。docker文件如下所示:

FROM java:8
VOLUME /tmp
ADD jpa-docker-1.0.0.jar  app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar",/app.jar"]
运行容器时,出现以下错误:

2015-06-12 19:25:57.200  WARN 1 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 42102, SQLState: 42S02
2015-06-12 19:25:57.200 ERROR 1 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : Table "CUSTOMER" not found; SQL statement:
因此,应用程序似乎看不到数据库。连接URL如下所示:
spring.datasource.url=jdbc:h2:/tmp/customerdb

正如我所提到的,当在docker容器外运行时,这可以很好地工作。我假设Dockerfile
VOLUME/tmp
中的行在容器中创建了
/tmp
目录,以及它包含的所有文件,这样数据库是可见的,但这似乎不起作用。想法

蒂亚,
-Ole这就是解决方案。首先,我添加了数据库docker build目录,其中包含
Dockerfile
。然后我用以下行更新
Dockerfile

ADD customerdb.h2.db  /tmp/customerdb.h2.db
应用程序现在可以连接到容器内的数据库。请注意,卷
/tmp/
中包含的数据库仅限于容器中,与我复制到工作站上
/tmp/
目录中的数据库不同

您应该使用docker。运行容器时,请指定以下参数:

-v <host folder>:<container folder> 
容器中的应用程序查找文件
/tmp/customerdb.h2.db
,该文件实际上位于主机上的
/tmp/customerdb.h2.db
,数据库文件实际存在的位置(通常,您可以在来宾和主机上使用不同的路径;在您的示例中,恰好主机和来宾文件夹都位于同一位置“/tmp”)

docker run -v /tmp:/tmp -d yourcontainer