使用Docker构建Julia集群

7

我正在尝试使用默认的SSHManager连接到Docker容器。这些容器只运行sshd,具有公钥身份验证和已安装的julia。

以下是我的dockerfile:

FROM rastasheep/ubuntu-sshd
RUN apt-get update && apt-get install -y julia
RUN mkdir -p /root/.ssh
ADD id_rsa.pub /root/.ssh/authorized_keys

我正在使用以下命令运行容器:

sudo docker run -d -p 3333:22 -it --name julia-sshd julia-sshd

然后在主机上,使用julia repl,我收到了以下错误提示:

julia> import Base:SSHManager
julia> addprocs(["root@localhost:3333"])
stdin: is not a tty
Worker 2 terminated.
ERROR (unhandled task failure): EOFError: read end of file
Master process (id 1) could not connect within 60.0 seconds.
exiting.

我已经测试过,可以通过ssh无需密码连接到容器。

我还测试过,在julia repl中,我可以将安装了julia的常规机器添加到群集中,一切正常。

但是我无法使这两个功能同时工作。有任何帮助或建议将不胜感激。


1
我对Docker一无所知。但也许你需要像ClusterManager这样的东西? - Kevin L. Keys
感谢您的回复!我在代码片段中使用SSHManager。 - torce
我怀疑问题与配置有关,但我不确定。我也尝试使用--machinefile选项,但发现了相同的问题。我对Docker和Julia都很陌生,所以我不知道底层发生了什么。我一直在阅读SSHManager的实现,但仍然没有运气。 - torce
1
考虑将此发布到 julia-users 群组。你也可以尝试运气,向 ClusterManagers.jl 的维护者发出请求,但请注意 Docker 在该群组并未得到官方支持。 - Kevin L. Keys
1个回答

2
我建议您也将Master部署在Docker容器中。这样可以使您的环境易于重现和完全可靠。
我正在研究一种按需部署工作进程的方法,即在Docker容器中部署Workers。例如,部署在容器中的Master可以部署更多的DockerizedJuliaWorker。这类似于https://github.com/gsd-ufal/Infra.jl,但假设Master和Workers运行在同一主机上,这使得事情不那么困难。
这是一个正在进行中的工作,我计划在接下来的几周内完成。简而言之:
1)您需要一个简单的DockerBackend和一个包装器来透明地运行容器、设置SSH并使用所有低级参数调用addprocs(即DockerizedJuliaWorker.jl文件)。

https://github.com/NaelsonDouglas/DistributedMachineLearningThesis/tree/master/src/docker

“2) 阅读此处以了解如何构建 Docker 镜像(包含 Dockerfile):”

https://github.com/NaelsonDouglas/DistributedMachineLearningThesis

请告诉我,如果您有任何改进建议的话。
最好的祝福,
André Lage。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接