如何从在docker容器中运行的脚本中获取要在OS X上显示的matplotlib图

时间:2018-06-11 12:04:20

标签: docker matplotlib

正如标题所述,我有一个docker容器,使用ubuntu 16.04基本映像,安装了matplotlib和各种依赖项。

我知道我可以使用jupyter笔记本或其他东西将绘图写入文件或其他东西,但是我特别希望能够放入容器内的python shell并从那里调用plt.plot()。

我已阅读有关设置显示变量等的内容,但到目前为止还没有多少运气。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

基于原始问题的设置,其中安装了Ubuntu容器并安装了Python3 / Matplotlib *,您不需要jupyter或笔记本即可保存图形。但是,您将必须run使用-v plt.plot()装载容器的容器。

这里是一个示例,说明如何直接在容器中输入Python终端并运行docker run -it --name ubuntu_python -v /output/:/output/ <your_ubuntu_image> /bin/bash 。然后,您可以将图形保存到装入的卷中,并在主机上显示该图形:

bash

这将使您通过一个python3终端进入容器,您可以从该终端安装依赖项,运行docker exec -it ubuntu_python /bin/bash ,依此类推。如果您想在之后访问该容器(具有相同的安装卷)退出时,您可以随时使用(如@ssnk所述):

python3

在容器中运行python(或/output)后,您将拥有一个python shell,您可以从中生成图形并将其保存到已安装的卷import matplotlib.pyplot as plt x = list(range(1,10)) y = list(range(1,10)) fig1 = plt.figure() plt.plot(x,y) # increase your pixel density when saving the image # (optional, but it's useful when you can't inspect the image beforehand with plt.show) your_dpi = 200 out_path = '/output/your_filename.png' plt.savefig(out_path, dpi=your_dpi)

/output/your_filename.png

然后您可以在主机上以jupyter的形式查看文件。无需在Docker中使用显示变量,这是查看在容器内创建的图形的可靠方法(出于交互性,您可以尝试conda)。


*另外:如果您不想在每次启动容器时都手动安装依赖项(例如,如果您需要安装新卷),下面是一个快速示例,该示例创建了一个Docker容器,其中包含您的依赖项-使用Dockerfile.conda安装:

创建entrypoint.sh# Dockerfile.conda FROM ubuntu:bionic RUN apt-get update -y \ && apt upgrade -y \ && apt install -y wget RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \ && mkdir /root/.conda \ && bash Miniconda3-latest-Linux-x86_64.sh -b \ && rm -f Miniconda3-latest-Linux-x86_64.sh ENV PATH /root/miniconda3/bin:$PATH ### Add your packages here ### RUN conda install -y matplotlib # Set up runtime COPY entrypoint.sh /entrypoint.sh RUN chmod 755 /entrypoint.sh ENTRYPOINT ["/bin/bash", "entrypoint.sh"] 如下:

# entrypoint.sh

#!/bin/sh                                                                                            
conda init bash
/bin/bash    #refresh the shell to load conda
conda activate base
docker build . -t username/ubuntu:conda -f Dockerfile.conda

通过在同一目录中运行图像来构建图像:

username/ubuntu:conda

您现在可以通过命名映像if (str.indexOf('https') === -1) { str = str.replace('http', 'https') }来运行matplotlib Python容器,而不是每次都安装在shell中。

答案 1 :(得分:0)

据我了解,您想在docker内部运行的python shell中运行命令。

如果正确,则可以运行容器,然后只需执行此操作

docker exec -it CONTAINER_NAME python

注意python可以是python3,具体取决于您的容器。

这会将您连接到容器内的python shell。然后,您可以做魔术。

此外,如果要生成文件图形,则可以将其写入从主机安装的文件夹中,以便在OSX机器中获得输出。

希望这会有所帮助。