我有两个Docker容器运行在不同的AWS示例上。一个容器包含dask-scheduler。另一个主机运行一个启动dask-worker的容器。我可以通过适当的VPC配置和容器的端口共享连接这两个容器。当scheduler和worker报告正确的信息时,worker似乎正在连接到scheduler。我提供了flag --contact-地址,具有运行工作容器的AWS示例的IP。
工人展示:已注册到tcp://scheduler-ip调度程序显示:正在启动工作进程计算流,tcp://worker-ip〉
我可以启动dask控制台并查看连接的worker。
当我用python客户端调用提交任务时,任务会如期出现在dask调度器上,但是任务只在内存中,并没有开始处理,一段时间后,dask超时并返回错误:
“错误-无法收集密钥{'dask_node_name':[“TCP://工作者-IP”],...”
我已经在一台主机上使用两个容器执行了相同的代码库,没有问题。我想知道dask是否不喜欢这个架构,可能需要一个不同的架构。或者,因为dask抱怨一个特定的“密钥”,可能我的dag需要一个带有工作者IP的密钥对?这对我来说似乎很奇怪,因为我不能总是提前知道IP,并且不适合伸缩。
当我为这个错误检查dask代码库时,它的信息量不是很大。
1条答案
按热度按时间vulvrdjw1#
我在Docker run命令中使用了选项“--network host”来与容器共享主机网络,而不是尝试使用-p来共享端口范围,它工作正常。
归功于此答案Expose all ports for a Docker image