2015-06-12 86 views
1

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

然后我建立一个码头集装箱,并运行它。泊坞窗文件看起来像这样:

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目录以及它所包含的所有文件,以便数据库可见,但这似乎不起作用。思考?

TIA, - 奥莱

回答

1

您应该使用码头data volumes。当运行您的容器指定的参数:

-v <host folder>:<container folder> 

这样一来,在主机上映射,容器

例如内:

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

你的容器的外表里面的应用对于文件/tmp/customerdb.h2.db,实际上它在/tmp/customerdb.h2.db的主机上实际存在db文件(一般情况下,您可以在guest虚拟机和主机上使用不同的路径;在您的示例中,只是发生主机和guest虚拟机lders都在同一位置“/ tmp”)

0

这是解决方案。首先,我添加了包含Dockerfile的数据库docker build目录。然后,我更新Dockerfile与以下行:

ADD customerdb.h2.db /tmp/customerdb.h2.db 

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

相关问题