我在通过Docker Compose创建的容器中运行Apache Spark。当我创建worker时,我指定主机(我的笔记本电脑)上的哪个端口映射到worker上的Web UI端口8081
。使用1个容器,这可以正常工作,因为我可以绑定8081:8081
,并且容器化的Spark Master Web UI正确链接到localhost:8081
。
问题在于,当我通过docker-compose scale worker=3
扩展工作人员数量时,我无法在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
是否可以使用撰写文件中的SPARK_PUBLIC_DNS
或动态变量替换来完成某些操作?