如何对每个容器化的芹菜工人使用单独的容器服务?

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:
        ...