在docker compose中更改容器端口
我正在尝试让docker compose文件同时使用气流和火花。气流通常在8080:8080上运行,这也是spark所需要的。我有以下docker compose文件:在docker compose中更改容器端口,docker,apache-spark,airflow,Docker,Apache Spark,Airflow,我正在尝试让docker compose文件同时使用气流和火花。气流通常在8080:8080上运行,这也是spark所需要的。我有以下docker compose文件: version: '3.7' services: master: image: gettyimages/spark command: bin/spark-class org.apache.spark.deploy.master.Master -h master hostname: ma
version: '3.7'
services:
master:
image: gettyimages/spark
command: bin/spark-class org.apache.spark.deploy.master.Master -h master
hostname: master
environment:
MASTER: spark://master:7077
SPARK_CONF_DIR: /conf
SPARK_PUBLIC_DNS: localhost
expose:
- 7001
- 7002
- 7003
- 7004
- 7005
- 7077
- 6066
ports:
- 4040:4040
- 6066:6066
- 7077:7077
- 8080:8080
volumes:
- ./conf/master:/conf
- ./data:/tmp/data
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
expose:
- 7012
- 7013
- 7014
- 7015
- 8881
ports:
- 8081:8081
volumes:
- ./conf/worker:/conf
- ./data:/tmp/data
postgres:
image: postgres:9.6
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
logging:
options:
max-size: 10m
max-file: "3"
webserver:
image: puckel/docker-airflow:1.10.9
restart: always
depends_on:
- postgres
environment:
- LOAD_EX=y
- EXECUTOR=Local
logging:
options:
max-size: 10m
max-file: "3"
volumes:
- ./dags:/usr/local/airflow/dags
# Add this to have third party packages
- ./requirements.txt:/requirements.txt
# - ./plugins:/usr/local/airflow/plugins
ports:
- "8082:8080" # NEED TO CHANGE THIS LINE
command: webserver
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
interval: 30s
timeout: 30s
retries: 3
但具体来说,我们需要改变路线:
ports:
- "8082:8080" # NEED TO CHANGE THIS LINE
在web服务器下,因此没有端口冲突。但是,当我将容器端口更改为8080:8080以外的其他端口时,它不工作,无法连接/查找服务器。如何成功更改容器端口?在docker中指定端口映射时,您将提供2个端口,例如:8082:8080。 右端口是在容器中侦听的端口。 可以有多个容器在内部侦听同一端口。它们在您的本地主机中仍然不可用-这就是为什么我们使用ports部分 现在,在本地主机中,不能多次绑定同一端口。这就是为什么docker在多次尝试设置左侧8080时失败的原因。 在当前撰写文件中,spark服务端口映射到8080:8080的8080左侧,Web服务器服务映射到8082:8080的8082左侧
如果要访问spark,请转到:http://localhost:8080 对于web服务器,请转到http://localhost:8082在docker中指定端口映射时,将提供两个端口,例如:8082:8080。 右端口是在容器中侦听的端口。 可以有多个容器在内部侦听同一端口。它们在您的本地主机中仍然不可用-这就是为什么我们使用ports部分 现在,在本地主机中,不能多次绑定同一端口。这就是为什么docker在多次尝试设置左侧8080时失败的原因。 在当前撰写文件中,spark服务端口映射到8080:8080的8080左侧,Web服务器服务映射到8082:8080的8082左侧
如果要访问spark,请转到:http://localhost:8080 对于web服务器,请转到http://localhost:8082我不明白-如果您的Web服务器可以通过localhost:8082访问,而spark可以通过localhost:8080访问,那有什么问题吗?我不知道,我对docker很陌生,所以可能什么都没有?但是,8080:8080和8082:8080这两个数字不就是造成集装箱港口冲突的原因吗?我完全准备好在这里犯错,btwI不明白-如果你的Web服务器可以在localhost:8082中访问,而spark可以在localhost:8080中访问,那有什么问题吗?我不知道,我对docker很陌生,所以可能什么都没有?但是,8080:8080和8082:8080这两个数字不就是造成集装箱港口冲突的原因吗?我完全准备好在这里犯错。谢谢你,这很有帮助。当我尝试运行pyspark作业时,我发现错误Java网关进程在发送端口号之前就结束了。你知道如何修复吗?如果没有,我将提出一个单独的问题,解决这个问题的办法是什么?docker log中是否可以监控此冲突?@DBA108642这是一个不同的问题,但在内部,如果两个容器想要相互通信,则应使用容器名称和实际的内部端口。例如,如果工作人员想与master对话,则应使用master:。希望这是帮助谢谢,我认为用另一个问题问更合适,@mountainLion冲突是由docker compose在向上命令之前确定的谢谢,这很有帮助。当我尝试运行pyspark作业时,我发现错误Java网关进程在发送端口号之前就结束了。你知道如何修复吗?如果没有,我将提出一个单独的问题,解决这个问题的办法是什么?docker log中是否可以监控此冲突?@DBA108642这是一个不同的问题,但在内部,如果两个容器想要相互通信,则应使用容器名称和实际的内部端口。例如,如果工作人员想与master对话,则应使用master:。希望这是帮助谢谢,我认为用另一个问题问更合适,@mountainLion冲突是由docker compose在up命令之前确定的