访问 docker 容器中的持久 H2 DB

Accessing persistent H2 DB in docker container

我正在部署一个 springboot 应用程序,我想使用一个持久性数据库。所以,在 application.properties 文件中,我有

spring.datasource.url=jdbc:h2:file:/home/ubuntu/db;AUTO_SERVER=TRUE;

现在,只要我在不使用容器的情况下启动此应用程序,它就可以工作。现在,我构建了一个 docker 图像并尝试 运行 应用程序。 Dockerfile 看起来像

FROM maven:3-jdk-11 AS maven
ARG BUILD = target/build.jar
COPY ${BUILD} build.jar
EXPOSE 8080
USER spring:spring
ENTRYPOINT["java","-jar","/build.jar"]

现在,当我尝试启动它时,它不起作用,因为它在容器内搜索 /home/ubuntu/db,而容器不存在。有没有办法让 docker 容器内的应用程序访问主机文件夹 /home/ubuntu/db?感谢您的回复。

缺少的部分是告诉 docker 何时 运行 容器将 /home/ubuntu/db 从主机装载到容器中。

你这样做: docker run -v <folder_on_host>:<folder_in_cointainer>

以你的例子: docker run -v /home/ubuntu/db:/home/ubuntu/db

有关 docker 文档的更多信息:https://docs.docker.com/get-started/06_bind_mounts/

以防万一它对其他人有帮助,要使用的完整命令是:

docker run -v /home/ubuntu/db:/home/ubuntu/db --privileged -p $HOST_PORT:$CONTAINER_PORT <image-name>