我有一个基本的Sping Boot 应用程序,其中包含一个文件中的H2数据库。
application.properties:
spring.datasource.url=jdbc:h2:file:./src/main/resources/database/db
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
此数据库文件是预填充的。当我使用mvn spring-boot:run
启动应用程序时,我可以看到DB不是空的。
我用mvn spring-boot:build-image
构建了一个Docker镜像,并用docker run -p 8080:8080 --rm myapp:tag
运行它。当访问数据库时,我在容器日志中得到以下内容:
(...)
Table "XXX" not found (this database is empty)
(...)
就像容器看不到DB文件一样。为什么会这样呢?
1条答案
按热度按时间ubof19bj1#
正如@Joachim Sauer在评论中回答的那样,原因是
spring.datasource.url
中定义的路径,在本例中为./src/main/resources/database/db
,在运行时读取。而且,一旦打包到Docker镜像中,这个路径就变得无关紧要了。如果它对某人有用,这里是我如何使它工作的,如果H2 DB文件是
./src/main/resources/database/db.mv.db
:1.创建一个新文件
application-docker.properties
1.添加此属性:
spring.datasource.url=jdbc:h2:file:./BOOT-INF/classes/database/db
1.使用
mvn spring-boot:build-image
构建映像(无更改)1.用
docker run -p 8080:8080 --rm -e "SPRING_PROFILES_ACTIVE=docker" myapp:tag
运行图像