在docker compose中更改容器端口

des4xlb0  于 2021-05-19  发布在  Spark
关注(0)|答案(1)|浏览(1158)

我试图得到一个docker撰写文件与气流和Spark工作。气流通常在 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: 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 它不工作(无法连接/找到服务器)。如何成功更改集装箱港口?

llmtgqce

llmtgqce1#

在docker中指定端口Map时,将提供2个端口,例如: 8082:8080 . 正确的端口是在容器中侦听的端口。可以有多个容器在内部侦听同一端口。它们在您的localhost中仍然不可用-这就是为什么我们使用 ports 的节。
现在,在localhost中不能多次绑定同一端口。这就是为什么当你试图在左边设置时docker失败了 8080 不止一次。在当前的撰写文件中 spark 服务端口Map到8080(端口左侧 8080:8080 )以及 webserver 服务Map到 8082 (左侧) 8082:8080 ).
如果要访问spark,请转到:http://localhost:8080对于web服务器,转到http://localhost:8082

相关问题