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

时间:2017-05-10 18:34:22

标签: python docker celery docker-compose airflow

我想做什么 - 用芹菜在码头工人中运行气流 我的问题 - 我的芹菜工人是容器,我不知道如何扩大它们

我的docker-comopose文件:

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命令,它在localhost上的端口8793上启动worker的实例,因为我从docker端口映射到localhost。现在我想做的是扩展我拥有的工人数量,并使用以下命令来做:

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

但由于工作实例已经在8793上运行,因此会发出错误。当我扩展时,有没有办法动态地将端口分配给工作容器的新实例?

1 个答案:

答案 0 :(得分:0)

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

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使用网络,您实际上可以完全省略此发布步骤,并且它可以正常工作。因此,只需从工作人员

中删除ports:即可