Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 python脚本的Docker容器/卷中的相对路径_Python 2.7_Docker_Containers_Mounted Volumes - Fatal编程技术网

Python 2.7 python脚本的Docker容器/卷中的相对路径

Python 2.7 python脚本的Docker容器/卷中的相对路径,python-2.7,docker,containers,mounted-volumes,Python 2.7,Docker,Containers,Mounted Volumes,我是Docker新手,但使用Docker toolbox for windows 10成功地验证了一些现有python代码 目前我有以下设置: 这是通过Dockerfile完成的: FROM python:2.7.13 WORKDIR /root COPY ./requirements.txt /root/requirements.txt RUN pip install -r requirements.txt COPY . /root CMD ["python", "main.py"] 我所

我是Docker新手,但使用Docker toolbox for windows 10成功地验证了一些现有python代码

目前我有以下设置:

这是通过Dockerfile完成的:

FROM python:2.7.13
WORKDIR /root
COPY ./requirements.txt /root/requirements.txt
RUN pip install -r requirements.txt
COPY . /root
CMD ["python", "main.py"]
我所有的代码都放在容器中,容器中有一堆CSV和.pkl文件。问题是CSV和.pkl文件每天都在变化,所以在阅读一些内容之后,我想我可以将这些文件拆分成一个卷,或者甚至是一个单独的容器,我可以每天修改和上传,而无需更改python主脚本,因为它的大小是1.4G,我的上传速度是40kbps(最多)

因此,我想知道如何引用另一个容器/卷,以便在我的主体Python代码中访问CSV和/pkl文件?目前,所有内容都位于同一个目录中,因此没有问题,我只需调用.csv/.pkl名称,它就可以工作了

#open the local .csv file
data = pd.read_csv(csv_select)
#open the local .pkl file
pickled_list = pickle.load(open(can_cat+".pkl","rb"))
如何引用上述代码从单独的容器中打开csv/pkl文件


我读过大量的stackoverflow帖子和docker文档,但似乎不明白如何使其发挥作用,如果有任何帮助,我将不胜感激。

是的,您在使用卷方面的想法是正确的。我会把它分成三部分:

  • 在一个容器中运行的python代码
  • 在python容器和一个或多个其他容器之间共享的卷
  • “数据复制”容器,每天将最新数据复制到共享卷
  • 1。共享卷

    使用Docker创建卷很容易。特别好的是,您可以创建具有特定名称的卷:

    docker volume create data-volume
    
    因此,我们在这里创建了
    数据卷
    命名卷。然后,您可以使用以下命令将其装载到任何容器上:

    docker run --rm -v data-volume:/data my-container-image
    
    因此,这里我们从my container image Docker映像运行一个容器,并将
    数据卷
    装载到该容器中的
    /data

    您的python代码可以轻松地从该目录中读取所需的文件。例如
    /data
    ,或者您可以根据需要更改装入点

    2。将更改的数据复制到卷中

    下一步是创建一个简单的应用程序,可以将最新的更改复制到该目录中。同样,假设此应用程序将最新数据复制到自己的文件系统上的
    /data
    。本质上,我们需要一款能够:

    cp $TODAYS_DATA.csv $TODAYS_DATA.pkl /data
    
    我们可以在容器中运行此应用程序,并确保容器中的
    数据卷
    安装在
    数据
    上,例如:

    docker run --rm data-volume:/data my-data-copying-app
    
    这个容器可以非常简单,比如:

    FROM alpine:latest
    COPY ./todaysdata /todaysdata
    
    然后,您可以使用以下命令运行它:

    docker run --rm data-volume:/data my-data-copy-image "/bin/sh -c cp -r /todaysdata/* /data/"
    
    因此,基本上您只需使用命令运行容器,将今天的数据复制到
    /data
    。因为
    /data
    实际上是一个卷,所以最新的数据会立即与您的python应用程序共享,这正是您想要的


    希望对您有所帮助。

    因此此
    pd.read\u csv
    将在容器内运行,并且卷将从主机装入?谢谢Rob!我今天一有时间就要尝试一下,我会告诉你一切的进展。感谢您的详细回复,我没有想到要将其复制到容器卷中,我只是专注于如何访问另一个容器位置的数据。嘿,Rob,我发现了一种类似的方法来实现您在谈论复制容器时描述的相同功能:docker run-v my volume:/data--name helper busybox true,docker cp。helper:/data,docker rm helper@MichaelDalton是的,我的解决方案是使用
    docker cp
    。例如,您可以创建一个脚本,将当前文件复制到运行容器的主机上,然后
    docker cp
    将它们复制到容器中。任何一种方法都绝对有效。