Java 连接到Docker容器中的H2数据库
我有一个基本的Spring Boot数据JPA项目。我连接到的h2数据库位于Java 连接到Docker容器中的H2数据库,java,spring,maven,jpa,docker,Java,Spring,Maven,Jpa,Docker,我有一个基本的Spring Boot数据JPA项目。我连接到的h2数据库位于/tmp/customerdb.h2.db。使用mvn spring boot运行应用程序时:运行一切正常。应用程序连接到数据库,添加记录,并将添加的记录打印到控制台 然后我构建一个docker容器,并运行它。docker文件如下所示: FROM java:8 VOLUME /tmp ADD jpa-docker-1.0.0.jar app.jar RUN bash -c 'touch /app.jar' ENTRYP
/tmp/customerdb.h2.db
。使用mvn spring boot运行应用程序时:运行一切正常。应用程序连接到数据库,添加记录,并将添加的记录打印到控制台
然后我构建一个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:
因此,应用程序似乎看不到数据库。连接URL如下所示:
spring.datasource.url=jdbc:h2:/tmp/customerdb
正如我所提到的,当在docker容器外运行时,这可以很好地工作。我假设DockerfileVOLUME/tmp
中的行在容器中创建了/tmp
目录,以及它包含的所有文件,这样数据库是可见的,但这似乎不起作用。想法
蒂亚,
-Ole这就是解决方案。首先,我添加了数据库docker build目录,其中包含
Dockerfile
。然后我用以下行更新Dockerfile
:
ADD customerdb.h2.db /tmp/customerdb.h2.db
应用程序现在可以连接到容器内的数据库。请注意,卷/tmp/
中包含的数据库仅限于容器中,与我复制到工作站上/tmp/
目录中的数据库不同 您应该使用docker。运行容器时,请指定以下参数:
-v <host folder>:<container folder>
容器中的应用程序查找文件/tmp/customerdb.h2.db
,该文件实际上位于主机上的/tmp/customerdb.h2.db
,数据库文件实际存在的位置(通常,您可以在来宾和主机上使用不同的路径;在您的示例中,恰好主机和来宾文件夹都位于同一位置“/tmp”)
docker run -v /tmp:/tmp -d yourcontainer