Docker:如何在Docker容器中运行Bokeh服务器并公开输出



我有一个Bokeh python代码,它从excel文件中导入数据,并在谷歌地图上投影我的供应商位置。excel文件存储在我的本地主机上的文件夹C:\Python中,Python代码从中提取它。此代码在打开命令提示符并使用命令";Bokeh发球——显示Gmaps_Bokeh.py";。然而,当我构建docker文件以执行同样的操作并将端口5006映射到2000时,我在浏览器中看不到任何内容。

我在我的主机上创建了一个Docker文件夹,其中包含Gmaps_Bokeh.py、Sid.xls和Dockerfile,在我的Dockerfile中,我正在复制容器的/Python目录中的所有内容。

docker终端显示以下内容

$ docker run -p 5006:2000 sid
2019-11-03 20:38:43,329 Starting Bokeh server version 1.3.4 (running on 
Tornado 6.0.3)
2019-11-03 20:38:43,334 Bokeh app running at:    
http://localhost:5006/Gmaps_Bokeh
2019-11-03 20:38:43,334 Starting Bokeh server with process id: 1

Dockerfile内容

FROM python
RUN pip install bokeh
RUN pip install gmaps
RUN pip install pandas
RUN pip install xlrd
WORKDIR /Python
COPY . /Python
EXPOSE 2000
CMD ["bokeh", "serve","/Python/Gmaps_Bokeh.py"]

要访问主机上的文件夹,需要使用docker卷将主机的c:/python映射到某个linux路径。此外,您需要重新配置应用程序以使用该路径(在容器上(,而不是c:/python(或任何其他直接的主机窗口路径(。

在我看来,你的端口搞砸了。分别考虑主机端口和容器端口。

正如控制台输出中所示,一旦您在容器中运行容器,您就有了在端口5006上发布的bokeh(这里localhost是从容器的角度来看的(。这是您需要在Dockerfile中公开的内容(因此它应该是EXPOSE 5006(。到目前为止,你在集装箱里,对2000港一无所知。

如果您想将容器端口5006(bokeh服务的地方(暴露给主机系统端口2000,您可以使用docker run命令中的-p 2000:5006,并在浏览器中使用http://localhost:2000查找它,如@Tony的注释所示。

一个重要的说明应该将所有这些结合在一起:当从主机系统(运行浏览器的地方(请求时,localhost与从容器(bokeh控制台输出的地方(发出请求时的localhost不同。

最新更新