【发布时间】:2021-08-17 14:35:53
【问题描述】:
我尝试在 Amazon 的 ECS 上运行调度程序和工作人员 docker 容器。 我正在使用这个例子: https://docs.dask.org/en/latest/setup/docker.html
调度程序运行良好,我从本地机器成功连接到它:
distributed.scheduler - INFO - Remove client Client-0ae5b0fa
distributed.scheduler - INFO - Close client connection: Client-0ae5b0fa
distributed.scheduler - INFO - Remove client Client-0ae5b0fa
distributed.core - INFO - Starting established connection
distributed.scheduler - INFO - Receive client connection: Client-0ae5b0fa
我尝试用同样的方式运行worker,使用这个命令:
dask-worker tcp://SCHEDULER_PUBLIC_IP:8786
worker 正在写入这些日志并退出:
+ exec 'dask-worker tcp://SCHEDULER_PUBLIC_IP:8786'
/usr/bin/prepare.sh: line 30: /dask-worker tcp://SCHEDULER_PUBLIC_IP:8786: No such file or directory
+ '[' '' ']'
no environment.yml
+ '[' -e /opt/app/environment.yml ']'
+ echo 'no environment.yml'
+ '[' '' ']'
+ '[' '' ']'
我希望工作程序连接到调度程序,因为当我在 EC2 实例上尝试它们时,相同的命令有效。另外,我尝试使用所有对 tcp 连接开放的端口来执行此操作,但仍然没有。
环境:
- Dask docker 容器版本:6bfa3b19b4be(2021 年 8 月 1 日)(最新)
- Fargate 版本:1.4.0(最新)
- 容器有 2 个 vCPU,4 Gb 内存
【问题讨论】:
-
从我读到的内容,我假设您正在从docs.dask.org/en/latest/setup/docker.html 链接的容器映像中构建两个 ECS 服务(一个用于调度程序,一个用于工作程序)?另外我知道调度程序可以工作,但工作人员不能?具体来说,工作人员中的容器会以该错误消息退出?从消息看来,脚本正试图读取一个变量以访问调度程序。
SCHEDULER_PUBLIC_IP是否应该改为$SCHEDULER_PUBLIC_IP?您需要将该变量传递给工作人员服务/任务吗? -
总而言之,我发现很难将链接 (docs.dask.org/en/latest/setup/docker.html) 中的内容与您正在部署的内容联系起来。
-
@mreferre 感谢您的评论。是的,我使用 daskdev/dask:latest 构建了两个服务。您再次正确理解,调度程序工作但工作人员没有。我把原来的错误信息改成不显示机器的实际公网IP,它不是环境变量。
-
我在调度程序的任务定义中使用的命令: dask-scheduler 。我在工作人员的任务定义中使用的命令: dask-worker tcp://1.2.3.4:8786 。出于测试目的,我运行调度器任务,记下它的公共 IP,并在 worker 的定义中使用它。我知道我应该使用服务发现,我会稍后处理。
标签: docker dask amazon-ecs aws-fargate