Java Dockerfile可以';t复制指定的本地目录&;文件
从几天以来,我一直在努力让它工作,但由于我无法删除一个查询,所以无法得到澄清 所以,我有以下项目结构,我想为其构建dockerfile 正如您从上面的项目结构中所看到的,我有两个文件需要关注。lib中的jars和文件.databricks-connect 这些基本上是我在本地系统上使用命令databricks connect配置databricks connect后生成的文件。由于这是一个交互式过程,我们无法在docker容器上模拟该过程,因此我希望在docker内复制配置,以备使用 下面是我的文件。(我是码头工人的新手,因此我怀疑我的问题可能微不足道) 以下是运行docker Build-t graphtransformer时的错误:最新--无缓存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内复制配置,以备使用 下面是我
=> 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"]