使用Docker和Python,如何访问批量创建的csv文件? Python代码 Dockerfile Docker命令编辑

编辑

添加了daudnadeem的建议。

  1. 在目录中创建了一个名为temp_folder的Dockerfile文件夹。
  2. 将python文件的最后一行更新为df.to_csv('/temp_folder/temp.csv')
  3. 先运行docker build,然后再运行新的运行命令docker run -v temp_folder:/temp_folder alexd/myapp .

我有一个使用Docker的非常简单的Python示例。该代码运行良好,但我不知道如何访问由Python代码创建的CSV文件。我已经在Docker中创建了一个卷,并使用docker inspect来尝试访问CSV文件,但是我不确定语法,无法在网上找到对我有意义的示例。

Python代码

import pandas as pd
import numpy as np 
import os

df = pd.DataFrame(np.random.randint(0,100,size=(100,4)),columns=['A','B','C','D'])

df.to_csv('temp.csv')

Dockerfile

FROM python:3.7.1

RUN mkdir -p /var/docker-example

WORKDIR /var/docker-example

COPY ./ /var/docker-example

RUN pip install -r requirements.txt

ENTRYPOINT python /var/docker-example/main.py

Docker命令

$ docker build -t alexf/myapp -f ./Dockerfile .

$ docker volume create temp-vol

$ docker run -v temp-vol alexf/myapp .

$ docker inspect -f temp.csv temp-vol
temp.csv
yaobaoshun 回答:使用Docker和Python,如何访问批量创建的csv文件? Python代码 Dockerfile Docker命令编辑

您的“ temp.csv”生活在临时docker映像上。因此,为了使您能够在docker映像之外访问它,最好的做法是公开一个卷。

在拥有Dockerfile的目录中,创建一个名为“ this_folder”的文件夹

然后,在运行映像时,将该卷安装到容器docker run -v this_folder:/this_folder <image-name>内的文件夹中

然后将此代码更改为:

import pandas as pd
import numpy as np 
import os

df = pd.DataFrame(np.random.randint(0,100,size=(100,4)),columns=['A','B','C','D'])

df.to_csv('/this_folder/temp.csv')

“ this_folder”现在是一个“卷”,您的Docker容器和主机可以相互访问。因此,在您的Docker容器之外,如果您ls /this_folder,您应该看到temp.csv现在生活在那里。

如果您不想挂载卷,则可以将文件上传到某个地方,然后再下载。但是在本地环境中,只需挂载该文件夹,然后使用它在容器和本地计算机之间共享文件即可。

编辑

当docker的工作不按计划进行时,您可能希望以交互方式访问它。就是说'ssh'进入您的docker容器'

您可以使用docker run -it pandas_example /bin/bash

登录后,我看到文件'temp.csv'与main.py位于同一文件夹中

现在由您决定进一步解决此问题。您需要将“ temp.csv”文件移动到与本地计算机共享的目录中。

FROM python:3.7.1

RUN pip3 install pandas

COPY test.py /my_working_folder/

CMD python3 /my_working_folder/test.py

要快速修复,请添加

import subprocess
subprocess.call("mv temp.csv /temp_folder/",shell=True)

到main.py的末尾。但这不建议。

,

如果您的唯一目标是了解卷如何工作以及如何在容器内由Python代码创建的主机上的文件中找到文件,就让事情变得简单

Dockerfile:

FROM python:3.7.1

RUN mkdir -p /var/docker-example

WORKDIR /var/docker-example

COPY . /var/docker-example

ENTRYPOINT python /var/docker-example/main.py

main.py -将在容器内创建/tmp/temp.txt,并在其中hi

with open('/tmp/temp.txt','w') as f:
    f.write('hi')

Docker命令(在项目文件夹中运行):

构建图像: docker build -t alexf/myapp .

使用已命名的卷vol映射到容器内的/tmp文件夹:

运行容器:docker run -d -v vol:/tmp alexf/myapp

检查音量:docker inspect vol [ { "CreatedAt": "2019-11-05T22:07:02+02:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/vol/_data","Name": "vol","Options": null,"Scope": "local" } ]

Bash命令在Docker主机上运行

sudo ls /var/lib/docker/volumes/vol/_data
temp.txt

sudo cat /var/lib/docker/volumes/vol/_data/temp.txt
hi

您还可以使用绑定安装和匿名卷来获得相同的结果。

Docs

本文链接:https://www.f2er.com/3158123.html

大家都在问