尝试使用名为“ 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")
问题:文件在哪里?
答案 0 :(得分:1)
执行此操作的方法有多种,这里有一些。
docker cp
首先使用docker ps -a
找出您的Containerid,然后执行以下操作:
docker cp <containerid>:/app /tmp/mydir
您将在/tmp/mydir
的主机上找到内容。
Dockerfile VOLUME
将此行添加到Dockerfile
之后的COPY
中:
VOLUME /app
现在像运行容器一样运行容器:
docker run -p 4000:80 testrun
现在做:
docker inspect -f '{{ .Mounts }}' <containerid>
从<containerid>
获得docker ps -a
的地方。您将看到类似的内容:
[{volume 511961d95cd5de9a32afe3358c7b9af3eabd50179846fdebd9c882d50c7ffee7 /var/lib/docker/volumes/511961d95cd5de9a32afe3358c7b9af3eabd50179846fdebd9c882d50c7ffee7/_data /app local true }]
您会看到一条路径:
/ var / lib / docker / volumes / 511961d95cd5de9a32afe3358c7b9af3eabd50179846fdebd9c882d50c7ffee7 / _data
这是容器的/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/
的主机上找到文件