我有两个工作节点:worker1和worker2以及一个swarm管理器。我只在工作节点中运行所有服务。我需要从管理器docker exec运行来访问工作节点中创建的一些容器,但我一直认为服务无法识别。我知道我可以在任何工作节点中运行docker exec并且它工作正常但我不想在服务运行的节点上找到,然后ssh到指定的节点运行docker exec命令。有没有办法在swarm中这样做?
答案 0 :(得分:7)
Swarm模式目前没有办法在正在运行的任务上运行exec。您需要找到容器并在主机上运行exec。您可以将工作程序配置为具有他们侦听的受TLS保护的端口,这将为您提供远程访问(请参阅docker's guide)。您可以通过检查docker service ps $service_name
的输出来查找服务中每个任务的节点。
答案 1 :(得分:2)
如果这有帮助,现在您可以使用--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>
....