几天以来,我做了很多尝试让它工作,但因为我不能不得不放弃对 SO 的查询来澄清它。
所以,我已经关注了我想要为其构建 dockerfile 的项目结构。
正如您从上面的项目结构中看到的那样,我有 2 个我关心的文件。lib中的jar和文件.databricks -connect
这些本质上是我在本地系统上使用命令databricks-connect配置 databricks-connect 后生成的文件。由于它是一个交互式过程,我们无法在 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 时的错误。--无缓存
=> 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 将失败。
任何帮助将不胜感激。
提前致谢。