首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接到Docker容器中的H2数据库

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

Stack Overflow用户
提问于 2015-06-13 03:32:28
回答 2查看 11.6K关注 0票数 1

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

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

代码语言:javascript
复制
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"]

当我运行容器时,我得到了以下错误:

代码语言:javascript
复制
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:

因此,看起来应用程序看不到数据库。连接地址如下所示:spring.datasource.url=jdbc:h2:/tmp/customerdb

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

TIA,- Ole

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-15 20:33:15

您应该使用docker data volumes。在运行容器时,您需要指定以下参数:

代码语言:javascript
复制
-v <host folder>:<container folder> 

这样,就可以在容器内映射主机上的

例如:

代码语言:javascript
复制
docker run -v /tmp:/tmp -d yourcontainer

容器内的应用程序查找文件/tmp/customerdb.h2.db,该文件实际上位于主机上的/tmp/customerdb.h2.db上,也就是数据库文件实际存在的位置(通常,您可以在来宾和主机上使用不同的路径;在您的示例中,主机和来宾文件夹恰好都在相同的位置"/tmp")。

票数 1
EN

Stack Overflow用户

发布于 2015-06-13 18:17:40

这就是解决方案。首先,我添加了包含Dockerfile的数据库docker构建目录。然后,我用下面的代码行更新Dockerfile

代码语言:javascript
复制
ADD customerdb.h2.db  /tmp/customerdb.h2.db

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30810858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档