无法访问位于Docker容器内的Spark Web UI

时间:2018-12-16 13:35:41

标签: docker apache-spark centos7 rhel7

我有一个远程虚拟机,并且正在开发一个在Docker容器中运行的Spark应用程序。

2018-12-16 13:07:10 INFO  main [AbstractConnector] - Started ServerConnector@79c3f01f{HTTP/1.1,[http/1.1]}{0.0.0.0:4040}
2018-12-16 13:07:10 INFO  main [Utils] - Successfully started service 'SparkUI' on port 4040.
...
2018-12-16 13:07:10 INFO  main [SparkUI] - Bound SparkUI to 0.0.0.0, and started at http://f58300e7e6ea:4040

该日志表明它已正确启动SparkUI,但已绑定到容器的本地主机。此时,我决定在构建阶段使用EXPOSE端口4040,并在run期间将其发布,并用-p 4040:4040/tcp绑定两个端口。

当我尝试从本地计算机(在Firefox中)访问<remote host name>:4040时,无法连接到SparkUI。我也尝试通过telnet进行访问,但是什么也没有。

启动容器时,我可以使用netstat看到4040端口listeining,但也许无法从远程访问它。我该怎么办呢?

基本上,我想使用浏览器从家用PC->远程VM->(带有Spark UI的Docker容器)访问SparkUI。

远程VM运行RHEL7。

1 个答案:

答案 0 :(得分:1)

在您的日志中,它说Spark UI从started at http://f58300e7e6ea:4040开始,此处f58300e7e6ea是docker内部网络主机名。

所以您要做的是

首先在您的应用程序中进行部署,然后通过以下两个配置进行设置

  1. spark.driver.bindAddress作为您选择的任何字符串的主机名
  2. spark.driver.host作为您的远程VM ip地址。

第二,当您使用映像部署Docker容器时,请使用--hostname标志将主机名引入容器并使用先前选择的字符串。例如docker run --hostname myHostName --ip 10.1.2.3 ubuntu:16.04