我有一个基本的Spring Boot Data JPA项目。我要连接的h2数据库位于/tmp/customerdb.h2.db。在使用mvn spring-boot:run运行应用程序时,一切正常。应用程序连接到数据库,添加记录,并将添加的记录打印到控制台。
然后,我构建了一个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:因此,看起来应用程序看不到数据库。连接地址如下所示:spring.datasource.url=jdbc:h2:/tmp/customerdb
正如我所提到的,当在docker容器之外运行时,它工作得很好。我假设Dockerfile VOLUME /tmp中的代码行在容器中创建了/tmp目录,以及它包含的所有文件,这样数据库就是可见的,但这似乎不起作用。有什么想法?
TIA,- Ole
发布于 2015-12-15 20:33:15
您应该使用docker data volumes。在运行容器时,您需要指定以下参数:
-v <host folder>:<container folder> 这样,就可以在容器内映射主机上的
例如:
docker run -v /tmp:/tmp -d yourcontainer容器内的应用程序查找文件/tmp/customerdb.h2.db,该文件实际上位于主机上的/tmp/customerdb.h2.db上,也就是数据库文件实际存在的位置(通常,您可以在来宾和主机上使用不同的路径;在您的示例中,主机和来宾文件夹恰好都在相同的位置"/tmp")。
发布于 2015-06-13 18:17:40
这就是解决方案。首先,我添加了包含Dockerfile的数据库docker构建目录。然后,我用下面的代码行更新Dockerfile:
ADD customerdb.h2.db /tmp/customerdb.h2.db应用程序现在可以连接到容器内的数据库。请注意,卷/tmp/中包含的数据库仅限于容器,与我复制到工作站上的/tmp/目录中的数据库不同。
https://stackoverflow.com/questions/30810858
复制相似问题