Python 停止docker容器之前,请复制一个文件并将其存储到主机

Python 停止docker容器之前,请复制一个文件并将其存储到主机,python,docker,dockerfile,Python,Docker,Dockerfile,我正在尝试构建一个运行python脚本的docker映像。基本上,它正在生成.csv文件。我希望在docker容器消失之前,将.csv文件保存在本地主机中。下面是我的dockerfile,有谁能帮助我在不再次运行docker容器的情况下存储.csv文件 from ubuntu:18.04 run apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ python3 \ git

我正在尝试构建一个运行python脚本的
docker映像。基本上,它正在生成
.csv
文件。我希望在
docker容器
消失之前,将
.csv
文件保存在本地主机中。下面是我的
dockerfile
,有谁能帮助我在不再次运行
docker容器的情况下存储
.csv
文件

from ubuntu:18.04

run apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    python3 \
    git \
    python3-pip

run pip3 install --upgrade tensorflow
run pip3 install opencv-python
run pip3 install keras
run pip3 install psutil
run pip3 install py-cpuinfo
run pip3 install https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.3/imageai-2.0.3-py3-none-any.whl

workdir /data/code/



COPY . /data/
RUN ls /data/code/ | grep model

RUN chmod +x /data/code/image_prediction.py

CMD ["python3", "./image_prediction.py", "-OPTIONAL_FLAG"]

在主机上装载卷,这样可以工作

如果在容器内的
/path/in/container
位置创建
.csv
,则运行

docker run-itd-v/path/on/host/:/path/in/container


这将使您的
.csv
在主机上的
/path/on/host/
位置可用,即使您的容器已死亡。

您可以将输出直接发送到主机。您必须在运行docker映像时执行此操作。以下是执行此操作的步骤:

  • 例如,在桌面上创建一个文件夹,并将输入数据放入其中。称之为
    input\u dir
    。此文件夹的完整路径类似于
    /path/to/input\u dir/
    (您可以通过进入此文件夹并在终端
    pwd
    上键入来获取它)
  • 例如,在桌面的主机上为脚本的输出创建另一个文件夹。称之为
    output\u dir
    。此文件夹的完整路径为:
    path/to/output\u dir
  • 运行docker映像应如下所示:

     docker run -it -v /path/to/input_dir/:/data/ -v /path/to/output_dir/:/data/output/ my-image bash
    
  • 完成后,您的输入将在
    /data/input
    中自动可用,并确保您将输出目录设置为“/data/output”


    运行完脚本后,您将在主机上的文件夹中找到您的输出:
    /path/to/output\u dir/

    如何运行python脚本?dockerfile
    的最后两行为我提供了配置并帮助我运行python脚本我将在python虚拟环境中运行它,尤其是因为您似乎没有操作系统级库依赖项。这将更容易,不需要根级别的访问,并避免此特定问题,我尝试使用以下命令运行docker容器-
    docker run-itd-v/home/souvik/PycharmProjects/app_image\u prediction/:/data/code/test.csv--name test imageprediction&
    但它给了我一些奇怪的错误。错误如下-
    f02。。docker:来自守护程序的错误响应:OCI运行时创建失败:container\u linux.go:345:启动容器进程导致“process\u linux.go:424:container init导致\“rootfs\u linux.go:58:mounting\\\\”/home/souvik/PycharmProjects/app\u image\\\“to rootfs\\”/var..2..28/merged\\“at\\”/var../overly2/../merged/data/code/test.csv\”导致\\\\“不是目录\\\\”\:未知:您是否正在尝试将目录装载到文件上(反之亦然)?检查指定的主机路径是否存在且是否为预期类型。
    您的
    -v
    选项应为
    -v/home/souvik/PycharmProjects/app\u image\u prediction/:/data/code/
    不要放置test.csv。挂载应该在目录之间,而不是确切的文件位置。亲爱的,当我运行以下命令-
    docker run-it-v/home/souvik/input\u folder/:/data//home/souvik/output\u folder/:/data/output/imageprediction bash
    ,我得到了错误-
    docker:invalid reference format.
    抱歉,我更正了它。我忘记了在输入和输出目录之间有一个
    -v
    。现在应该可以了,谢谢你的话我很感激。我们在StackOverflow中表达了这一点,并对答案表示接受和赞成。我很高兴这对你有用。我已经对你的评论投了赞成票,但不幸的是。。。我没有太多的声誉,所以我的选票没有被计入公开展示(很好的解释,谢谢!