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

Python 在多个端口上创建docker的副本,python,docker,celery,docker-compose,airflow,Python,Docker,Celery,Docker Compose,Airflow,我想做的是——用芹菜在docker中运行气流 我的问题-我的芹菜工人在容器里,我不知道如何缩放它们 我的docker文件: version: '2' services: mysql: image: mysql:latest restart: always ports: - "3306:3306" environment: - MYSQL_RANDOM_ROOT_PASSWORD=true - MYSQL_US

我想做的是——用芹菜在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端口映射到localhost时,它在localhost上的端口8793上启动一个worker实例。现在,我要做的是扩大我拥有的工人数量,为此,我使用以下命令:

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

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

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

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
端口:
设置为
-80
将容器中的端口80暴露给主机上的随机端口

因为Docker Compose使用网络,所以实际上可以完全省略这个发布步骤,这样就可以了。因此,只需从worker中删除
端口: