2015-06-12 84 views
1

我有一個基本的Spring Boot Data JPA項目。我要連接的h2數據庫位於/tmp/customerdb.h2.db。當使用mvn spring-boot:run運行應用程序時,一切正常。應用程序連接到數據庫,添加記錄,並將添加的記錄打印到控制檯。連接到Docker容器中的H2數據庫

然後我建立一個碼頭集裝箱,並運行它。泊塢窗文件看起來像這樣:

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容器外運行時工作正常。我假設Dockerfile VOLUME /tmp中的行在容器中創建/tmp目錄以及它所包含的所有文件,以便數據庫可見,但這似乎不起作用。思考?

TIA, - 奧萊

回答

1

您應該使用碼頭data volumes。當運行您的容器指定的參數:

-v <host folder>:<container folder> 

這樣一來,在主機上映射,容器

例如內:

docker run -v /tmp:/tmp -d yourcontainer 

你的容器的外表裏面的應用對於文件/tmp/customerdb.h2.db,實際上它在/tmp/customerdb.h2.db的主機上實際存在db文件(一般情況下,您可以在guest虛擬機和主機上使用不同的路徑;在您的示例中,只是發生主機和guest虛擬機lders都在同一位置「/ tmp」)

0

這是解決方案。首先,我添加了包含Dockerfile的數據庫docker build目錄。然後,我更新Dockerfile與以下行:

ADD customerdb.h2.db /tmp/customerdb.h2.db 

應用程序現在可以連接到容器內的數據庫。請注意,包含在卷/tmp/中的數據庫被限制在容器中,並且與我的工作站上覆制到/tmp/目錄的數據庫不同。

相關問題