正如标题所述,我有一个docker容器,使用ubuntu 16.04基本映像,安装了matplotlib和各种依赖项。
我知道我可以使用jupyter笔记本或其他东西将绘图写入文件或其他东西,但是我特别希望能够放入容器内的python shell并从那里调用plt.plot()。
我已阅读有关设置显示变量等的内容,但到目前为止还没有多少运气。
任何帮助都将不胜感激。
答案 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机器中获得输出。
希望这会有所帮助。