在 docker 容器中运行我的 spring 应用程序时清空 h2 db
Posted
技术标签:
【中文标题】在 docker 容器中运行我的 spring 应用程序时清空 h2 db【英文标题】:Empty h2 db when running my spring app in docker container 【发布时间】:2021-12-28 23:11:32 【问题描述】:我有一个使用 H2 持久 DB 的 spring 应用程序,其中有一个文件位于我的机器上。
如果我在 docker 容器之外运行应用程序,则数据库不为空。如果我在 docker 中运行应用程序,数据库将变为空。我读了这篇文章:Connecting to an H2 Database in a Docker Container 并尝试添加卷。据我了解,码头工人可以将本地数据库文件保存在带有卷的容器中。但似乎我还没有让它工作,因为数据库仍然是空的。谁能帮帮我?
application.properties
spring.datasource.url=jdbc:h2:./TESTDB/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto= update
spring.h2.console.enabled=true
spring.h2.console.path=/h2-ui
spring.h2.console.settings.web-allow-others=true
Dockerfile
FROM azul/zulu-openjdk-alpine:11
ARG JAR_FILE=target/*.jar
COPY $JAR_FILE app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
我这样运行容器:
docker run -v ./TESTDB:/TESTDB -p 8080:8080 test-container
【问题讨论】:
【参考方案1】:-v ./TESTDB:/TESTDB
不是非法的 Docker 挂载规范吗?通常,你会得到这个:
docker: Error response from daemon: create ./TESTDB: "./TESTDB" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
See 'docker run --help'.
试试:
docker run -v $(pwd)/TESTDB:TESTDB -p 8080:8080 test-container
(假设您使用的是 Linux 或 macOS 等操作系统)
【讨论】:
以上是关于在 docker 容器中运行我的 spring 应用程序时清空 h2 db的主要内容,如果未能解决你的问题,请参考以下文章
在Docker容器中运行Spring Boot GraalVM原生镜像
无法从Spring Boot Docker容器连接到本地MySQL数据库服务器