我可以将目录从docker区域之外的某个位置复制到docker文件吗?

2024-04-26 03:04:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在我的Dockerfile中通过requirements.txt文件安装了一个名为fastai==1.0.59的库

但由于一个错误,运行Django应用程序的目的没有实现。为了解决这个错误,我需要手动编辑这个库文件夹中的文件/site-packages/fastai/torch_core.pysite-packages/fastai/basic_train.py,我不打算这样做

因此,我试图将fastai文件夹本身从主机复制到docker映像中的位置

源位置:/Users/AjayB/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/fastai/

目标位置:../venv/lib/python3.6/site-packages/,在我的docker映像中

作为docker的新手,我使用COPY命令尝试了以下操作: COPY /Users/AjayB/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/fastai/ ../venv/lib/python3.6/site-packages/

这给了我一个错误:

ERROR: Service 'app' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder583041406/Users/AjayB/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/fastai: no such file or directory.

我试着引用这个:How to include files outside of Docker's build context? 但它似乎从我的头上弹了一下

请帮我解决这个问题。谢谢

Dockerfile:

FROM python:3.6-slim-buster AS build
MAINTAINER model1
ENV PYTHONUNBUFFERED 1


RUN python3 -m venv /venv
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git && \
    apt-get install -y build-essential && \
    apt-get install -y awscli && \
    apt-get install -y unzip && \
    apt-get install -y nano && \
    apt-get install -y libsm6 libxext6 libxrender-dev


RUN apt-cache search mysql-server
RUN apt-cache search libmysqlclient-dev
RUN apt-get install -y libpq-dev
RUN apt-get install -y postgresql
RUN apt-cache search postgresql-server-dev-9.5
RUN apt-get install -y libglib2.0-0

RUN mkdir -p /model/
COPY . /model/
WORKDIR /model/

RUN pip install --upgrade awscli==1.14.5 s3cmd==2.0.1 python-magic
RUN pip install -r ./requirements.txt

EXPOSE 8001

RUN chmod -R 777 /model/

COPY /Users/AjayB/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/fastai/ ../venv/lib/python3.6/site-packages/

CMD python3 -m /venv/activate
CMD /model/my_setup.sh development
CMD export API_ENV = development
CMD cd server && \
    python manage.py migrate && \
    python manage.py runserver 0.0.0.0:8001

Tags: installdockerrunpygetmodelvenvlib
1条回答
网友
1楼 · 发布于 2024-04-26 03:04:32

简短回答

没有

长答案

运行docker build时,当前目录及其所有内容(子目录和全部)将复制到名为“构建上下文”的暂存区域中。当您在Dockerfile中发出COPY指令时,docker将从暂存区域复制到映像文件系统中的一个层中

如您所见,这将禁止从构建上下文之外的目录复制文件

解决方法

在构建过程中,您可以将所需的文件从黄金源代码直接下载到映像中(这就是为什么您经常在DockerFile中看到许多curl语句的原因),或者您可以将所需的文件(dir)复制到构建树中,并将其作为项目的一部分签入源代码管理中。选择哪种方法完全取决于项目的性质和所需的文件

注释

有其他的解决方法记录了这一点,所有这些都毫无例外地打破了构建的“可移植性”的意图。唯一的高质量解决方案是这里记录的(尽管如果我错过了任何保持可移植性的方法,我很乐意添加到这个列表中)

相关问题 更多 >