Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Docker sqlite+;弹簧靴_Java_Sqlite_Spring Boot_Docker_Docker Compose - Fatal编程技术网

Java Docker sqlite+;弹簧靴

Java Docker sqlite+;弹簧靴,java,sqlite,spring-boot,docker,docker-compose,Java,Sqlite,Spring Boot,Docker,Docker Compose,我有一个使用sqlite的Spring启动应用程序。当我试图创建一个容器时,我得到一个异常 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaCon

我有一个使用sqlite的Spring启动应用程序。当我试图创建一个容器时,我得到一个异常

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
  • ADD
    是一个特殊的docker命令,用于URL和tar文件。大多数情况下,它只是做
    COPY
    所做的事情,但是当您不需要
    ADD
    的魔力时,最好使用
    COPY
    。因此,如果用
    COPY
    替换
    ADD
    有效,请尝试
  • 检查使用
    privileged
    标志是否修复了该问题。
    --privileged
    标志为容器提供了所有功能,如cgroup控制器实施的限制。然后,容器可以执行主机可以执行的几乎所有操作
  • 检查主机中的
    mydb.db
    权限。如果docker引擎没有适当的权限,它将无法将文件复制到docker容器

  • 1.尝试复制而不是添加2。使用
    privileged
    标志授予root权限。还要检查主机中
    mydb.db
    的权限machine@Rash如果容器需要重启主机系统之类的操作,那么您只需要
    --privileged
    ,也就是说,几乎不需要。如果容器进程以用户ID 0运行,则出于文件系统访问目的,它具有根权限。我同意。我几乎从不使用特权标志,也不推荐它,除非在docker类型的设置中使用docker。