2017-06-19 93 views
2

我有两个worker节点:worker1和worker2以及一个swarm manager。我只在工作节点中运行所有服务。我需要从经理docker exec运行以访问在工作节点中创建的一些容器,但我一直得知该服务无法识别。我知道我可以在任何工作节点上运行docker exec,并且它工作正常,但我不想找到服务运行在哪个节点上,然后ssh到指定节点运行docker exec命令。是否有办法在群体中这样做?从swarm manager运行docker exec

回答

6

Swarm模式目前没有办法在正在运行的任务上运行exec。你需要找到容器并在主机上运行exec。您可以将工作人员配置为拥有他们监听的TLS保护端口,这将为您提供远程访问(请参阅docker's guide)。您可以通过检查docker service ps $service_name的输出来查找服务中每个任务的节点。

+0

也许你想添加注释,这个功能已经被两个问题追踪:[github.com - MOBY/MOBY - 码头工人服务的exec(https://github.com/moby/moby/issues/ 27552) 和[github.com - docker/swarmkit - 支持执行任务](https://github.com/docker/swarmkit/issues/1895) – Murmel

1

如果这有帮助,现在您可以使用--attachable标志创建覆盖网络,以启用任何容器加入网络。这是一个很棒的功能,因为它具有很大的灵活性。

E.g.

$ docker network create --attachable --driver overlay my-network 
$ docker service create --network my-network --name web --publish 80:80 nginx 
$ docker run --network=my-network -ti alpine sh 
$ wget -qO- web 

<!DOCTYPE html> 
<html> 
<head> 
....