Docker组合将Spark Worker UI端口dynamic地扩展为主机

我有Apache Spark在通过Docker Compose创build的容器中运行。 当我创buildworker时,我指定主机(我的笔记本电脑)上的哪个端口映射到worker上的Web UI端口8081 。 有了1个容器,这个工作正常,因为我可以绑定8081:8081和集装箱式的Spark Master Web UI正确链接到localhost:8081

问题是当我通过docker-compose scale worker=3的数量时,我无法在docker-compose.yml的主机上指定端口,因为缩放会发生冲突。

我已经尝试过使用dynamic端口映射,但是这会导致主机端口被转发到工作端口8081将是类似于32XXX但Spark Master WebUI链接将仍然假定工作者WebUI是在端口8081意味着没有链接工作。

有没有一种方法来扩大我的容器没有港口冲突

docker-compose.yml的相关部分:

 worker: image: gettyimages/spark command: bin/spark-class org.apache.spark.deploy.worker.Worker spark://master:7077 hostname: worker environment: SPARK_CONF_DIR: /conf SPARK_WORKER_CORES: 2 SPARK_WORKER_MEMORY: 1g SPARK_WORKER_PORT: 8881 SPARK_WORKER_WEBUI_PORT: 8081 SPARK_PUBLIC_DNS: localhost links: - master - cassandra - kafka expose: - 7012 - 7013 - 7014 - 7015 - 7016 - 8881 ports: - 8081 # dynamic port binding. ends up being 32XXX:8081 # - 8081:8081 only works with 1 container 

有没有办法可以用组合文件中的SPARK_PUBLIC_DNS或dynamicvariablesreplace?