代码之家  ›  专栏  ›  技术社区  ›  user1578872

Kubernetes-Docker文件夹权限

  •  1
  • user1578872  · 技术社区  · 7 年前

    我有一个Docker的图像已经部署到Kubernetes了。

    docker文件如下。

    FROM alpine/jdk1.8:latest
    RUN mkdir -p /opt/test/app
    COPY app.war /opt/test/app/app.war
    
    CMD java -jar /opt/test/app/app.war
    

    此应用程序使用hibernate,并在尝试加载连接jar文件时出现以下错误。

    loggerName="org.hibernate.orm.url" threadName="main" txnId="" HHH10000002: File or directory named by URL [file:/opt/test/app/app.war!/WEB-INF/classes] could not be found.  URL will be ignored
    java.io.FileNotFoundException: /opt/test/app/app.war!/WEB-INF/classes (No such file or directory)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:225)
        at java.util.zip.ZipFile.<init>(ZipFile.java:155)
        at java.util.jar.JarFile.<init>(JarFile.java:166)
        at java.util.jar.JarFile.<init>(JarFile.java:103)
        at org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor.resolveJarFileReference(JarFileBasedArchiveDescriptor.java:165)
        at org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor.visitArchive(JarFileBasedArchiveDescriptor.java:51)
        at org.hibernate.boot.archive.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:47)
        at org.hibernate.boot.model.process.internal.ScanningCoordinator.coordinateScan(ScanningCoordinator.java:75)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:98)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:199)
        at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34)
        at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165)
        at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:114)
        at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71)
        at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    

    Docker文件或Kubernetes部署yaml文件中是否有任何权限?

    休眠配置,

    Map<String, String> Props = new HashMap<String, String>();
            conProps.put("javax.persistence.jdbc.url", "JDBC_URL");
            conProps.put("javax.persistence.jdbc.password", "PASSWORD");
            conProps.put("javax.persistence.jdbc.user", "USER");
            conProps.put("oracle.net.ssl_cipher_suites","CIPHER");
            conProps.put("javax.persistence.jdbc.driver", "oracle.jdbc.OracleDriver");
    
             Persistence.createEntityManagerFactory("appjdbc", conProps);
    

    我检查了hibernate-core.jar并执行了下面的代码。 不确定,如果它应该返回jarprotocolarchivedescriptor,但返回jarfilebasedarchivedescriptor。

    public ArchiveDescriptor buildArchiveDescriptor(URL url, String entry) {
            final String protocol = url.getProtocol();
            if ( "jar".equals( protocol ) ) {
                return new JarProtocolArchiveDescriptor( this, url, entry );
            }
            else if ( StringHelper.isEmpty( protocol )
                    || "file".equals( protocol )
                    || "vfszip".equals( protocol )
                    || "vfsfile".equals( protocol ) ) {
                final File file = new File( extractLocalFilePath( url ) );
                if ( file.isDirectory() ) {
                    return new ExplodedArchiveDescriptor( this, url, entry );
                }
                else {
                    return new JarFileBasedArchiveDescriptor( this, url, entry );
                }
            }
            else {
                //let's assume the url can return the jar as a zip stream
                return new JarInputStreamBasedArchiveDescriptor( this, url, entry );
            }
        }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   mdaniel    7 年前

    loggername=“org.hibernate.orm.url”threadname=“main”txnid=“”hh1000002:由url命名的文件或目录[文件:/opt/test/app/app.war!/找不到WEB-INF/classes]。URL将被忽略

    不,这不是一个被拒绝的权限,它使用了一个不正确的url方案。 file://thing 很好,但是使用“bang”语法需要在url前面加上 jar: ,就像这样:

    jar:file:///opt/test/app/app.war!/WEB-INF/classes
    

    如果没有更多的上下文,我不能说这是hibernate错误还是您的配置错误,但是我可以非常自信地说,错误消息是完全正确的:没有这样的目录 app.war!

    推荐文章