Docker 容器中的并行代码执行

Dal*_*ler 5 scaling docker docker-compose

我有一个通过 URLslist 抓取数据的脚本。该脚本在 docker 容器中执行。我想在多个实例中运行它,例如 20。为此,我想使用docker-compose scale worker=20并将 INDEX 传递给每个实例,以便脚本知道应该抓取哪些 URL哪些 URL 。

例子。

ID, URL
0 https://example.org/sdga2
1 https://example.org/fsdh34
2 https://example.org/fs4h35
3 https://example.org/f1h36
4 https://example.org/fs4h37
...
Run Code Online (Sandbox Code Playgroud)

如果有 3 个实例,第一个脚本实例应处理 ID 等于 0、3、6、9 的 url,即 ID = INDEX + INSTANCES_NUM * k。

我不知道如何将 INDEX 传递给在 Docker 容器中运行的脚本。当然,我可以在环境变量中使用不同的 INDEX 复制 docker-compose.yml 中的服务。但如果实例数大于 10 甚至 50,这将是一个非常糟糕的解决方案)

有谁知道怎么做?

BMi*_*tch 5

就我而言docker-compose我不相信对此有任何支持。但是,在群模式下,可以使用类似的撰写文件,您可以使用服务模板{{.Task.Slot}}作为环境变量进行传递。例如

\n\n
version: \'3\'\nservices:\n  test:\n    image: busybox\n    command: /bin/sh -c "echo My task number is $$task_id && tail -f /dev/null"\n    environment:\n      task_id: "{{.Task.Slot}}"\n    deploy:\n      replicas: 5\n
Run Code Online (Sandbox Code Playgroud)\n\n

相反docker-compose up,我部署为docker stack deploy -c docker-compose.yml test. 我的本地 swarm 集群只是使用docker swarm init.

\n\n

然后,检查每个正在运行的容器:

\n\n
$ docker ps --filter label=com.docker.swarm.service.name=test_test\nCONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES\nccd0dbebbcbe        busybox:latest      "/bin/sh -c \'echo My\xe2\x80\xa6"   About a minute ago   Up About a minute                       test_test.3.i3jg6qrg09wjmntq1q17690q4\nbfaa22fa3342        busybox:latest      "/bin/sh -c \'echo My\xe2\x80\xa6"   About a minute ago   Up About a minute                       test_test.5.iur5kg6o3hn5wpmudmbx3gvy1\na372c0ce39a2        busybox:latest      "/bin/sh -c \'echo My\xe2\x80\xa6"   About a minute ago   Up About a minute                       test_test.4.rzmhyjnjk00qfs0ljpfyyjz73\n0b47d19224f6        busybox:latest      "/bin/sh -c \'echo My\xe2\x80\xa6"   About a minute ago   Up About a minute                       test_test.1.tm97lz6dqmhl80dam6bsuvc8j\nc968cb5dbb5f        busybox:latest      "/bin/sh -c \'echo My\xe2\x80\xa6"   About a minute ago   Up About a minute                       test_test.2.757e8evknx745120ih5lmhk34\n\n$ docker ps --filter label=com.docker.swarm.service.name=test_test -q | xargs -n 1 docker logs\nMy task number is 3\nMy task number is 5\nMy task number is 4\nMy task number is 1\nMy task number is 2\n
Run Code Online (Sandbox Code Playgroud)\n