【发布时间】:2020-10-16 19:51:31
【问题描述】:
自几天以来尝试了很多使其工作,但因为我无法不得不放弃对 SO 的查询来澄清它。
所以,我已经关注了我想要为其构建 dockerfile 的项目结构。
从上面的项目结构中可以看出,我有 2 个我关心的文件。 lib 中的 jars 和文件 .databricks-connect
这些本质上是我在本地系统上使用命令 databricks-connect 配置 databricks-connect 后生成的文件。由于它是一个交互式过程,我们无法在 docker 容器上模拟它,所以我想要复制我的配置,以便在 docker 中使用。
下面是我的 Dockerfile。 (我对码头工人很陌生,因此我怀疑我的问题可能是微不足道的)
FROM ubuntu:18.04
# System packages
RUN apt-get update && apt-get install -y curl
# Install miniconda to /miniconda
RUN curl -LO http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
RUN bash Miniconda3-latest-Linux-x86_64.sh -p /miniconda -b
RUN rm Miniconda3-latest-Linux-x86_64.sh
ENV PATH=/miniconda/bin:${PATH}
RUN conda update -y conda
RUN apt-get update && \
apt-get install -y openjdk-8-jdk openjdk-8-jre
# Define working directory.
WORKDIR /app
# Define commonly used JAVA_HOME variable
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
ENV JRE_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre
COPY . /app
RUN conda create -n snowflake-graphdb python=3.7
ENV PATH /miniconda/bin:$PATH
# Activate the environment, and make sure it's activated:
RUN ["conda", "run", "-n", "snowflake-graphdb", "pip", "install", "-r", "requirements.txt"]
#COPY .databricks-connect /root
RUN ls -a
RUN "mkdir /miniconda/envs/snowflake-graphdb/lib/python3.7/site-packages/pyspark/jars"
COPY libs/ /miniconda/envs/snowflake-graphdb/lib/python3.7/site-packages/pyspark/jars/
RUN "touch /root/.databricks-connect"
RUN "cat /app/databricks-connect.txt > /root/.databricks-connect"
WORKDIR /app
ENV PYTHONPATH "${PYTHONPATH}://app/src/main/python"
ENTRYPOINT ["conda", "run", "-n", "snowflake-graphdb", "databricks-connect", "test"]
#ENTRYPOINT ["conda", "run", "-n", "snowflake-graphdb", "python", "/app/src/main/python/server/GraphTransformerServer.py"]
EXPOSE 1020
当我运行 docker built -t graphtransformer:latest 时出现以下错误。 --no-cache
=> 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 也失败并出现与上述相同的错误,即无法找到文件。
我尝试的另一件事是,因为我做了 COPY 。 /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 一起使用。在 RUNTIME 期间需要这些文件,因此如果没有这些文件,ENTRYPOINT 将失败。
任何帮助将不胜感激。
提前致谢。
【问题讨论】:
标签: java docker anaconda databricks databricks-connect