Docker Compose 在扩展时动态向主机公开 Spark Worker UI 端口

Exo*_*imp 6 docker apache-spark dockerfile

我在通过 Docker Compose 创建的容器内运行 Apache Spark。创建工作程序时,我指定主机(我的笔记本电脑)上的哪个端口映射到8081工作程序上的 Web UI 端口。对于 1 个容器,这工作正常,因为我可以绑定8081:8081并且容器化的 Spark Master Web UI 正确链接到localhost:8081.

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

我尝试过使用动态端口映射,但这会导致转发到工作端口 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
Run Code Online (Sandbox Code Playgroud)

是否可以通过SPARK_PUBLIC_DNScompose 文件中的 或 动态变量替换来完成某些操作?