Docker - 将Python输出写入当前工作目录下的CSV文件

6
我想学习如何使用Docker部署应用程序,并正在处理一个简单的Python程序,该程序在当前工作目录中编写一些数据到CSV文件中。我可以在本地机器上的当前工作目录中看到output.csv文件,但在运行Docker镜像时遇到了问题。
阅读了各种文章和Stack Overflow上的帖子后,使用“-v”挂载本地目录路径似乎是实现这一目标的方法,但我无法获取正确的命令。 我尝试在本地机器上创建一个名为“output_docker”的新目录(我还将程序中的get.cwd()选项替换为此路径),并使用-v选项来处理。
 docker container run -v "/Users/Desktop/output_docker" docker_image_name

Python代码(scraper.py)

import pandas as pd
import os

data = [['tom', 10], ['nick', 15], ['juli', 14]]
df = pd.DataFrame(data, columns = ['Name', 'Age'])

dirpath = os.getcwd()
print("dirpath = ", dirpath, "\n")

output_path = os.path.join(dirpath,'output.csv')
print(output_path,"\n")

df.to_csv(output_path)
FROM python:3
ADD scraper.py /
RUN pip install pandas
CMD ["python3","./scraper.py"]

本地机器上的输出

$python3 scraper.py
   Name  Age
0   tom   10
1  nick   15
2  juli   14

dirpath =  /Users/Prathusha/Desktop/topos_docker 

/Users/Prathusha/Desktop/topos_docker/output.csv 

运行docker镜像时的输出

$docker build -t ex_scraper .
$docker run ex_scraper
   Name  Age
0   tom   10
1  nick   15
2  juli   14
dirpath =  / 

/output.csv 

我知道 "output.csv" 文件将位于 Docker 容器的子目录中,但我希望在不同机器上运行 Docker 镜像时,它能够在当前工作目录(或桌面)中可见。 如果有人可以指出我的错误,我将不胜感激。

1
容器内创建的文件会一直保留在容器内,除非它们被映射到卷之外。如果您想从运行容器的主机访问在 Docker 容器内创建的文件,可以使用 -v $pwd:/docker run 命令中挂载工作目录。 - rdas
1个回答

12

您可以绑定您的主机目录,我建议使用 WORKDIR 并且将 ADD 替换为 COPY -

DOCKERFILE

FROM python:3
WORKDIR /mydata
COPY scraper.py ./
RUN pip install pandas
CMD ["python3","./scraper.py"]

运行它 -

docker run -v ${PWD}:/data ex_scraper
你现在应该能够在主机的当前目录中看到这个CSV文件。

没问题。你可以尝试在docker运行时使用“-v”,它会解决你的问题。 - vivekyad4v

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接