Docker sqlite +春季启动

时间:2019-09-06 18:35:06

标签: java sqlite spring-boot docker docker-compose

我有一个使用sqlite的Spring Boot应用程序。当我尝试创建容器时,出现异常

config/environments/production/database.json

似乎容器无法访问数据库文件。

文件结构为

enter image description here

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [clients]

Dockerfile

FROM openjdk:8 ADD project-app.jar project-app.jar ADD mydb.db mydb.db ENTRYPOINT ["java","-jar","project-app.jar"] EXPOSE 8082

docker-compose.yml

我尝试将sqlite像容器一样添加,我还尝试在version: '3.3' services: project-app: build: ./ image: project-app:1.0 restart: always container_name: project-app ports: - 8082:8082 volumes: - /var/run/docker.sock:/var/run/docker.sock network_mode: bridge 上复制MySQL配置,但仍然遇到相同的异常。

编辑:浏览完容器后,似乎数据库文件存在docker-compose.yml,但它为空,这意味着Dockerfile不会复制数据库。

mydb.db

1 个答案:

答案 0 :(得分:1)

  1. ADD是用于URL和tar文件的特殊docker命令。在大多数情况下,它只会做COPY的工作,但是当您不需要COPY的魔力时,首选ADD。因此,尝试将ADD替换为COPY是否可行。
  2. 检查是否使用privileged标志解决了该问题。 --privileged标志为容器提供了所有功能,例如cgroup控制器强制执行的限制。然后,容器可以执行主机可以执行的几乎所有操作。
  3. 检查主机中mydb.db的权限。如果Docker引擎没有适当的权限,则将文件复制到Docker容器时会遇到麻烦。