【问题标题】:Docker with python to copy file specified, unzip and do actions使用 python 的 Docker 复制指定的文件,解压缩并执行操作
【发布时间】:2022-01-17 22:09:32
【问题描述】:

设置

  • 项目
      • main.py
    • Dockerfile

Dockerfile(原始,需要修改)

FROM python:3
ADD src/main.py /
RUN chmod +x main.py
RUN /usr/local/bin/python -m pip install --upgrade pip
COPY . /opt/app
RUN pip install -r /opt/app/requirements.txt
ADD / /usr/local
ENTRYPOINT [ "python",  "./main.py" ]

main.py

​​>
if __name__ == '__main__':
   if len(sys.argv) == 2:
      main(sys.argv[1])

def main(logs_file_archive):
    unzip_logs(logs_file_archive)  # unzips all logs from the provided path to the folder with the same name as archive/Extracted directory
    create_csv_files()  # creates CSV files needed to plot graph
    process_files()  # populate CSV files generated with the right data
    plot(logs_file_archive)  # build this data representation

实际/期望的行为

实际

2022-01-17T22:05:31.547047838Z   File "//./main.py", line 214, in <module>
2022-01-17T22:05:31.547210046Z     main(sys.argv[1])
2022-01-17T22:05:31.547259438Z   File "//./main.py", line 187, in main
2022-01-17T22:05:31.547670294Z     unzip_logs(logs_file_archive)
2022-01-17T22:05:31.547732344Z   File "//./main.py", line 54, in unzip_logs
2022-01-17T22:05:31.548296998Z     with zipfile.ZipFile(file_path, "r") as zip_ref:
2022-01-17T22:05:31.548350898Z   File "/usr/local/lib/python3.10/zipfile.py", line 1240, in __init__
2022-01-17T22:05:31.549638566Z     self.fp = io.open(file, filemode)
2022-01-17T22:05:31.549692977Z FileNotFoundError: [Errno 2] No such file or directory: '/Users/user/PerfReader/misc/archive.zip'

No such file or directory: '/Users/user/PerfReader/misc/archive.zip' 应该很好...因为 Docker 机器中没有这样的文件。

期望:容器使用Dockerfile运行,数据处理,绘图实时显示或保存为文件并传输到主机

问题/问题描述

  1. 我不完全确定如何将指定的文件传输到 Docker 容器。我阅读了https://docs.docker.com/storage/volumes/,但它没有提供任何示例,因此我寻求有关如何安装卷的示例。
  2. 如果我在 main.py 中的 plot() 可以正确绘制数据,我在显示这些数据时有哪些选择(整个练习的输出是绘图)?我可以从 Docker 实时显示绘图吗?还是我唯一的选择是生成一个绘图,然后使用matplotlib.pyplot.savefig 将其传输回主机?

【问题讨论】:

  • 您的应用程序似乎在读取主机数据,并且要么写入主机数据,要么需要主机显示。 Docker(按设计)使访问所有这些“主机”事物变得困难。 Python 虚拟环境会更好地满足您的需求吗?

标签: python docker docker-volume file-copying


【解决方案1】:

第一个问题:

有多种方法可以访问主机文件。您可以使用 copyadd 命令,就像您在 Docker 文件中所做的那样,该文件将在构建映像期间被复制。此外,您可以使用绑定挂载,它允许您访问已绑定的主机目录,就像您在此目录中运行容器一样。

第二个问题:

Docker 不支持 GUI 或访问主机显示。但是,您可以使用Xauth 允许它这样做。请考虑以下link 的步骤。

无论哪种方式,我都不鼓励使用 Docker 来做你正在做的事情,尤其是绘图部分,python 虚拟环境就绰绰有余了。

【讨论】:

  • 如果有帮助,请考虑选择正确的答案,如果没有帮助,请考虑澄清。
  • 将作为 docker 参数传递的文件复制到 docker 容器,在那里生成 PNG(使用 python 脚本 - 不需要方向)然后将其复制到主机?
  • 绑定挂载是最简单的方法。您不需要使用任何参数。容器可以看到主机目录。您可以从 Docker shell 运行脚本并将其保存在任何目录中。保存的图像将立即出现在您的主机中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 2013-01-23
  • 2011-11-01
相关资源
最近更新 更多