2017-06-19 105 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> 
....