在多个端口上创建 docker 的副本

creating copies of docker on multiple ports

我正在尝试做的事情 - 运行 docker 中的气流与芹菜 我的问题 - 我的芹菜工人在容器中,我不知道如何扩展它们

我的docker-合成文件:

version: '2'  
services:  
mysql:  
  image: mysql:latest  
  restart: always  
  ports:  
      - "3306:3306"  
  environment:  
      - MYSQL_RANDOM_ROOT_PASSWORD=true  
      - MYSQL_USER=airflow  
      - MYSQL_PASSWORD=airflow  
      - MYSQL_DATABASE=airflow  
  volumes:  
      - mysql:/var/lib/mysql  

rabbitmq:  
  image: rabbitmq:3-management  
  restart: always  
  ports:  
      - "15672:15672"  
      - "5672:5672"  
      - "15671:15671"  
  environment:  
      - RABBITMQ_DEFAULT_USER=airflow  
      - RABBITMQ_DEFAULT_PASS=airflow 
      - RABBITMQ_DEFAULT_VHOST=airflow  
  volumes:  
      - rabbitmq:/var/lib/rabbitmq  

webserver:  
  image: airflow:ver5  
  restart: always  
  volumes:  
       - ~/airflow/dags:/usr/local/airflow/dags  
       - /opt/scripts:/opt/scripts      
  environment:  
      - AIRFLOW_HOME=/usr/local/airflow  
  ports:  
      - "8080:8080"  
  links:  
      - mysql:mysql  
      - rabbitmq:rabbitmq  
      - worker:worker  
      - scheduler:scheduler  
  depends_on:  
      - mysql  
      - rabbitmq  
      - worker  
      - schedulerv
  command: webserver  
  env_file: ./airflow.env  

scheduler:
  image: airflow:ver5
  restart: always
  volumes:
       - ~/airflow/dags:/usr/local/airflow/dags
       - /opt/scripts:/opt/scripts
  environment:
      - AIRFLOW_HOME=/usr/local/airflow
  links:
      - mysql:mysql
      - rabbitmq:rabbitmq
  depends_on:
      - mysql
      - rabbitmq
  command: scheduler
  env_file: ./airflow.env

worker:
  image: airflow:ver5
  restart: always
  volumes:
       - ~/airflow/dags:/usr/local/airflow/dags
       - /opt/scripts:/opt/scripts
  environment:
      - AIRFLOW_HOME=/usr/local/airflow
  ports:
      - "8793:8793"
  links:
      - mysql:mysql
      - rabbitmq:rabbitmq
  depends_on:
      - mysql
      - rabbitmq
  command: worker
  env_file: ./airflow.env

所以我 运行 使用上述文件的 docker-compose 命令,当我从 docker 端口映射到本地主机时,它会在本地主机的端口 8793 上启动一个工作实例.现在我想做的是扩大我拥有的工人数量,为此我使用以下命令:

docker-compose -f docker-compose.yml scale worker=5

但这给出了一个错误,因为 worker 实例已经 运行ning 在 8793 上。有没有一种方法可以在我向上扩展时为新的 worker 容器实例动态分配端口?

您可以允许您的工作节点在随机端口号上向主机公开工作端口:

worker:
  image: airflow:ver5
  restart: always
  volumes:
       - ~/airflow/dags:/usr/local/airflow/dags
       - /opt/scripts:/opt/scripts
  environment:
      - AIRFLOW_HOME=/usr/local/airflow
  ports:
      - "8793"
  links:
      - mysql:mysql
      - rabbitmq:rabbitmq
  depends_on:
      - mysql
      - rabbitmq
  command: worker
  env_file: ./airflow.env

port: 设置为 - 80 会将容器中的端口 80 暴露给主机上的随机端口。

因为 Docker Compose 使用网络,您实际上可以完全省略此发布步骤,而且它会起作用。所以只需从 worker

中删除 ports: