我通过Dockerfile
中的requirements.txt
文件安装了一个名为fastai==1.0.59
的库。
但是由于一个错误,运行Django应用程序的目的没有实现。为了解决这个错误,我需要手动编辑这个库文件夹中的文件/site-packages/fastai/torch_core.py
和site-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.
我试着引用这个:如何在Docker';s的构建上下文?但它似乎从我的头上弹了一下。。
请帮我解决这个问题。谢谢
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
简短回答
无
长答案
运行docker build
时,当前目录及其所有内容(子目录和全部(都会复制到一个名为"构建上下文"的临时区域中。当您在Dockerfile中发出COPY
指令时,docker将从暂存区域复制到映像文件系统中的一个层中。
正如您所看到的,这包括从构建上下文之外的目录中复制文件。
解决方案
在构建过程中,可以将您想要的文件从其黄金源直接下载到映像中(这就是为什么您经常在Dockerfiles中看到很多curl
语句(,也可以将所需的文件(目录(复制到构建树中,并将其作为项目的一部分检入到源代码管理中。选择哪种方法完全取决于项目的性质和所需的文件。
票据
对此还有其他解决方法,所有这些都无一例外地破坏了构建的"可移植性"意图。唯一的高质量解决方案是这里记录的解决方案(尽管如果我错过了任何保持可移植性的解决方案,我很乐意添加到这个列表中(。