繁体   English   中英

Docker sqlite +春季启动

[英]Docker sqlite + Spring Boot

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

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

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

我尝试将sqlite像容器一样添加,也尝试在docker-compose.yml上复制MySQL配置,但仍然遇到相同的异常。

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

    4 drwxr-xr-x   1 root root     4096 Sep  6 18:27 .
    4 drwxr-xr-x   1 root root     4096 Sep  6 18:27 ..
    0 -rwxr-xr-x   1 root root        0 Sep  6 18:27 .dockerenv
    4 drwxr-xr-x   1 root root     4096 Aug 14 11:23 bin
    4 drwxr-xr-x   2 root root     4096 Mar 28 09:12 boot
    0 drwxr-xr-x   5 root root      340 Sep  6 18:57 dev
    4 drwxr-xr-x   1 root root     4096 Sep  6 18:27 etc
    4 drwxr-xr-x   2 root root     4096 Mar 28 09:12 home
    4 drwxr-xr-x   1 root root     4096 Aug 12 00:00 lib
    4 drwxr-xr-x   2 root root     4096 Aug 12 00:00 lib64
    4 drwxr-xr-x   2 root root     4096 Aug 12 00:00 media
    4 drwxr-xr-x   2 root root     4096 Aug 12 00:00 mnt
    4 drwxr-xr-x   2 root root     4096 Aug 12 00:00 opt
    0 dr-xr-xr-x 145 root root        0 Sep  6 18:57 proc
    4 drwx------   1 root root     4096 Aug 14 11:25 root
    4 drwxr-xr-x   1 root root     4096 Sep  6 18:27 run
    4 drwxr-xr-x   1 root root     4096 Aug 14 06:24 sbin
46260 -rwxr-xr-x   1 root root 47367833 Sep  6 17:02 project-app.jar
    0 -rw-r--r--   1 root root        0 Sep  6 18:27 mydb.db
    4 drwxr-xr-x   2 root root     4096 Aug 12 00:00 srv
    0 dr-xr-xr-x  13 root root        0 Sep  6 18:57 sys
    4 drwxrwxrwt   1 root root     4096 Sep  6 18:57 tmp
    4 drwxr-xr-x   1 root root     4096 Aug 12 00:00 usr
    4 drwxr-xr-x   1 root root     4096 Aug 12 00:00 var
  1. ADD是用于URL和tar文件的特殊docker命令。 在大多数情况下,它只会做COPY所做的事情,但是当您不需要ADD的魔力时,首选COPY 因此,请尝试用COPY替换ADD是否COPY
  2. 检查是否使用privileged标志可以解决此问题。 --privileged标志为容器提供了所有功能,例如cgroup控制器强制执行的限制。 然后,容器可以执行主机可以执行的几乎所有操作。
  3. 在主机中检查mydb.db的权限。 如果docker引擎没有适当的权限,则将文件复制到docker容器时会遇到麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM