Python 停止docker容器之前,请复制一个文件并将其存储到主机
我正在尝试构建一个运行python脚本的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
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中表达了这一点,并对答案表示接受和赞成。我很高兴这对你有用。我已经对你的评论投了赞成票,但不幸的是。。。我没有太多的声誉,所以我的选票没有被计入公开展示(很好的解释,谢谢!