Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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 Dockerfile可以';t复制指定的本地目录&;文件_Java_Docker_Anaconda_Databricks_Databricks Connect - Fatal编程技术网

Java Dockerfile可以';t复制指定的本地目录&;文件

Java Dockerfile可以';t复制指定的本地目录&;文件,java,docker,anaconda,databricks,databricks-connect,Java,Docker,Anaconda,Databricks,Databricks Connect,从几天以来,我一直在努力让它工作,但由于我无法删除一个查询,所以无法得到澄清 所以,我有以下项目结构,我想为其构建dockerfile 正如您从上面的项目结构中所看到的,我有两个文件需要关注。lib中的jars和文件.databricks-connect 这些基本上是我在本地系统上使用命令databricks connect配置databricks connect后生成的文件。由于这是一个交互式过程,我们无法在docker容器上模拟该过程,因此我希望在docker内复制配置,以备使用 下面是我

从几天以来,我一直在努力让它工作,但由于我无法删除一个查询,所以无法得到澄清

所以,我有以下项目结构,我想为其构建dockerfile

正如您从上面的项目结构中所看到的,我有两个文件需要关注。lib中的jars和文件.databricks-connect

这些基本上是我在本地系统上使用命令databricks connect配置databricks connect后生成的文件。由于这是一个交互式过程,我们无法在docker容器上模拟该过程,因此我希望在docker内复制配置,以备使用

下面是我的文件。(我是码头工人的新手,因此我怀疑我的问题可能微不足道)

以下是运行docker Build-t graphtransformer时的错误:最新--无缓存

=> ERROR [14/17] COPY libs/  /miniconda/envs/snowflake-graphdb/lib/python3.7/site-packages/pyspark/jars/                                                                                                                         
------
> [14/17] COPY libs/  /miniconda/envs/snowflake-graphdb/lib/python3.7/site-packages/pyspark/jars/:
------
failed to solve with frontend dockerfile.v0: failed to build LLB: failed to compute cache key: "/libs" not found: not found
我尝试了其他目录,如docs等,但除了src之外,似乎什么都看不懂。 因此,我将/libs移动到src/main/libs以愚弄系统,使其也拾取该文件(在.gitignore中添加条目以忽略该文件),但它也没有从src/main/libs拾取。 此外,命令COPY.databricks connect/root也失败,出现与上述相同的错误,即无法找到文件

我尝试的另一件事是,因为我做了复制/app我希望包括libs和.databricks connect在内的所有文件都已在/app下的docker上下文中,所以我尝试了这样做

CMD "cp /app/libs/* /miniconda/envs/snowflake-graphdb/lib/python3.7/site-packages/pyspark/jars && cat /app/databricks-connect.txt > /root/.databricks-connect"
但这也因不同的错误而失败。上面的命令被追加到ENTRYPOINT。不知道为什么

在构建期间,将下面的文件装载到docker容器中的最佳方法是什么,这样整个容器就可以与compose一起使用。运行时需要这些文件,因此如果没有这些文件,入口点将失败

任何帮助都会非常感激


提前感谢。

我很难给出这样的答案(我想),因为dockerfile涉及两个不同的入口点,这是另一个我不知道的python构建(即,应该首先执行哪个入口点)。所以不管怎样,还是把它作为参考

通常的做法是,在整个项目本身打包到一个.class文件所在的单元(.war/jar)中之后,才能从java项目构建映像。据我所知,docker不会在docker容器中再次重建项目(更像是部署或运行.war/jar本身)。不过我可能错了。因此,最好先打包java项目

这里有个家伙采取了一种不同寻常的(可能是常见的)方法,基本上他将那些lib、class和META-INF文件夹及其内容提取到一个单独的文件夹中,即project/target/dependecy。如果您想知道,target文件夹是Eclipse IDE中生成的
.war/jar
的默认位置,那么他基本上得到了什么:

 target/dependency/lib
  target/dependency/classes
  target/dependency/META-INF 
然后他的码头工人建造:

ARG DEPENDENCY=target/dependency
    COPY ${DEPENDENCY}/lib /app/lib
    COPY ${DEPENDENCY}/META-INF /app/META-INF
    COPY ${DEPENDENCY}/classes /app
  ENTRYPOINT ["java", "-cp", "app:app/lib/*","com.javapointers.Application"]
dockerfile的位置是直接在项目中(与pom.xml处于同一级别),最终生成映像

ARG DEPENDENCY=target/dependency
    COPY ${DEPENDENCY}/lib /app/lib
    COPY ${DEPENDENCY}/META-INF /app/META-INF
    COPY ${DEPENDENCY}/classes /app
  ENTRYPOINT ["java", "-cp", "app:app/lib/*","com.javapointers.Application"]