如何对每个容器化的芹菜工人使用单独的容器服务?
How to use a separate container service with each containerised celery worker?
我正在使用 docker-compose
到 运行 多个 celery worker 并努力让 worker 按照我想要的方式使用这个 zeta0/alpine-tor
旋转代理池图像。
目前我的 docker-compose.yml
看起来像这样:
version: '3'
services:
worker:
build:
context: .
dockerfile: dockerfile
volumes:
- type: bind
source: .
target: /app
links:
- rabbit
- tor
depends_on:
- rabbit
- tor
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=myuser
- RABBITMQ_DEFAULT_PASS=mypassword
ports:
- "5672:5672"
tor:
hostname: tor
image: zeta0/alpine-tor
environment:
- tors=25
- privoxy=1
- new_circuit_period=10
ports:
- "8118:8118"
- "2090:2090"
然后我运行: docker-compose up --scale worker=5
.
问题是所有工作人员都在使用相同的 tor 服务。我想为每个工人提供单独的 alpine-tor 服务。这可能与 docker-compose
有关吗?如果是这样,我应该改变什么来实现它?
您可以尝试 运行 worker
作为 5 种不同的 docker-compose 服务(但都使用相同的 worker
图片),以及 运行 tor
服务作为 5 个不同的 docker-compose 服务(同样,使用相同的 tor
图片)。
对于 5 个 worker
服务中的每一个,您可以传入一个环境变量,指示您希望工作人员与哪个 tor
服务进行通信。然后在你的worker中,你可以在tor
URL.
中使用这个环境变量
所以你的 docker-compose.yml 看起来像这样(为简洁起见删除了一些配置):
version: '3'
services:
worker_1:
environment:
- TOR_SERVICE=tor_1
...
worker_2:
environment:
- TOR_SERVICE=tor_2
...
worker_3:
environment:
- TOR_SERVICE=tor_3
...
worker_4:
environment:
- TOR_SERVICE=tor_4
...
worker_5:
environment:
- TOR_SERVICE=tor_5
...
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=myuser
- RABBITMQ_DEFAULT_PASS=mypassword
ports:
- "5672:5672"
tor_1:
...
tor_2:
...
tor_3:
...
tor_4:
...
tor_5:
...
我正在使用 docker-compose
到 运行 多个 celery worker 并努力让 worker 按照我想要的方式使用这个 zeta0/alpine-tor
旋转代理池图像。
目前我的 docker-compose.yml
看起来像这样:
version: '3'
services:
worker:
build:
context: .
dockerfile: dockerfile
volumes:
- type: bind
source: .
target: /app
links:
- rabbit
- tor
depends_on:
- rabbit
- tor
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=myuser
- RABBITMQ_DEFAULT_PASS=mypassword
ports:
- "5672:5672"
tor:
hostname: tor
image: zeta0/alpine-tor
environment:
- tors=25
- privoxy=1
- new_circuit_period=10
ports:
- "8118:8118"
- "2090:2090"
然后我运行: docker-compose up --scale worker=5
.
问题是所有工作人员都在使用相同的 tor 服务。我想为每个工人提供单独的 alpine-tor 服务。这可能与 docker-compose
有关吗?如果是这样,我应该改变什么来实现它?
您可以尝试 运行 worker
作为 5 种不同的 docker-compose 服务(但都使用相同的 worker
图片),以及 运行 tor
服务作为 5 个不同的 docker-compose 服务(同样,使用相同的 tor
图片)。
对于 5 个 worker
服务中的每一个,您可以传入一个环境变量,指示您希望工作人员与哪个 tor
服务进行通信。然后在你的worker中,你可以在tor
URL.
所以你的 docker-compose.yml 看起来像这样(为简洁起见删除了一些配置):
version: '3'
services:
worker_1:
environment:
- TOR_SERVICE=tor_1
...
worker_2:
environment:
- TOR_SERVICE=tor_2
...
worker_3:
environment:
- TOR_SERVICE=tor_3
...
worker_4:
environment:
- TOR_SERVICE=tor_4
...
worker_5:
environment:
- TOR_SERVICE=tor_5
...
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=myuser
- RABBITMQ_DEFAULT_PASS=mypassword
ports:
- "5672:5672"
tor_1:
...
tor_2:
...
tor_3:
...
tor_4:
...
tor_5:
...