Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
在docker容器中使用python脚本创建文件(pdf、xls)_Python_Docker - Fatal编程技术网

在docker容器中使用python脚本创建文件(pdf、xls)

在docker容器中使用python脚本创建文件(pdf、xls),python,docker,Python,Docker,尝试使用名为“scriptfile.py”的python脚本创建简单文件。当我运行它时,它会输出一个带有正弦波的pdf文件和一个包含3x10数据帧的xls文件,该数据帧最初是从一个名为“csv_file.csv”的csv文件导入的。此外,还显示了正弦波图。这一切都很好 现在,我已经基于Docker文档中的app.py示例创建了一个Dockerfile。我使用 sudo docker build --tag=testrun . 并使用 sudo docker run -p 4000:80 tes

尝试使用名为“scriptfile.py”的python脚本创建简单文件。当我运行它时,它会输出一个带有正弦波的pdf文件和一个包含3x10数据帧的xls文件,该数据帧最初是从一个名为“csv_file.csv”的csv文件导入的。此外,还显示了正弦波图。这一切都很好

现在,我已经基于Docker文档中的app.py示例创建了一个Dockerfile。我使用

sudo docker build --tag=testrun .
并使用

sudo docker run -p 4000:80 testrun
控制台输出正常,但未创建任何文件,也未显示任何绘图。Dockerfile和scriptfile.py的代码如下所示

上面写着

FROM python:3

WORKDIR /app
COPY . /app

ADD scriptfile.py /

RUN pip install matplotlib
RUN pip install xlwt
RUN pip install pandas

EXPOSE 80

ENV NAME DockerTester

CMD ["python","/scriptfile.py"]
scriptfile.py读取

import math
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('csv_file.csv', sep=",", header=None)
df.to_excel(r'xlx_file.xls')

print("plotting ...")

sinusoid=[]
for i in range(100):
    sinusoid.append(math.sin(i))

f = plt.figure()
plt.plot(sinusoid)
plt.show()
f.savefig("sin.pdf")
plt.close()

print("... success")

问题:文件在哪里?

有多种方法可以做到这一点,以下是一些方法

使用
docker cp
首先使用
docker ps-a
计算您的集装箱ID,然后执行以下操作:

docker cp <containerid>:/app /tmp/mydir
现在,以如下方式运行容器:

docker run -p 4000:80 testrun
现在做:

docker inspect -f '{{ .Mounts }}' <containerid>
如您所见,有一条路径:

/var/lib/docker/volumes/511961D95CD5DE9A3AFE3358C7B9AF3EABD50179846FDEBD9C882D50C7FFEE7/_数据

这就是容器的
/app
目录内容所在的位置

使用
docker run-v
更改python脚本以编写一个位置,而不是
/app
,类似于
f.savefig(“/tmp/sin.pdf”)

然后像这样运行docker:

docker run -it -v /tmp/share/:/tmp -p 4000:80 testrun

现在,您将在主机上的
/tmp/share/

上找到您的文件。不要对
.py
等普通文件使用
添加
。如果您发现自己经常更改
scriptfile.py
(比更改
pip install
命令更频繁),那么将
COPY
WORKDIR
行放在
运行pip install
之后会对您有所帮助。这样,您就不必在每次更改
scriptfile.py
时都使用
pip
重新安装。
[{volume 511961d95cd5de9a32afe3358c7b9af3eabd50179846fdebd9c882d50c7ffee7 /var/lib/docker/volumes/511961d95cd5de9a32afe3358c7b9af3eabd50179846fdebd9c882d50c7ffee7/_data /app local  true }] 
docker run -it -v /tmp/share/:/tmp -p 4000:80 testrun