2017-09-22 29 views
2

發生崩潰,我現在遇到此問題,它說碼頭羣狀態處於掛起狀態,節點狀態爲UNKNOWN。這是我的docker info結果無法從待處理狀態恢復碼頭羣

[email protected]:~$ docker info 
Containers: 270 
Running: 0 
Paused: 0 
Stopped: 270 
Images: 160 
Server Version: 1.12.2 
Storage Driver: aufs 
Root Dir: /var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 1211 
Dirperm1 Supported: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: host bridge null overlay 
Swarm: pending 
NodeID: d9hq8wzz6skh9pzrxzhbckm97 
Is Manager: true 
ClusterID: 5zgab5w50qgvvep35eqcbote2 
Managers: 1 
Nodes: 2 
Orchestration: 
    Task History Retention Limit: 5 
Raft: 
    Snapshot Interval: 10000 
    Heartbeat Tick: 1 
    Election Tick: 3 
Dispatcher: 
    Heartbeat Period: 5 seconds 
CA Configuration: 
    Expiry Duration: 3 months 
Node Address: HIDDEN 
Runtimes: runc 
Default Runtime: runc 
Security Options: apparmor seccomp 
Kernel Version: 4.4.0-91-generic 
Operating System: Ubuntu 16.04.1 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 2 
Total Memory: 6.804 GiB 
Name: swarm-manager-1 
ID: AXPO:VFSV:TDT3:6X7Y:QNAO:OZJN:U23R:V5S2:FU33:WUNI:CRPK:2E2C 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 
Insecure Registries: 
127.0.0.0/8 

這是我的搬運工節點LS的結果是:

ID       HOSTNAME   STATUS AVAILABILITY MANAGER STATUS 
9tlo3rg7tuc23xzc3am28lak1 swarm-worker-1 Unknown Active   
d9hq8wzz6skh9pzrxzhbckm97 * swarm-manager-1 Unknown Active  Leader 

我試圖重新啓動泊塢窗機和虛擬機,但以任何方式於事無補。系統實際上正在運行,因爲當我在工作人員中說docker ps時,它顯示所有容器,但是在管理器上,docker ps上沒有任何東西。

有什麼想法?

回答

0

在我使用Swarm的經驗中,類似麻煩的唯一解決方案是摧毀羣體。而當你這樣做時,你應該也可以做一個docker system prune(只有當這些東西沒有什麼價值可以刪除)和service docker restart。然後建立一個新的羣體。

它很爛。我知道

0

不是一次只重建整個羣體,而是每次嘗試刪除並重新添加一個節點 - 這樣做的好處是羣體狀態不會被破壞,並且對於較大的羣體,服務可以在您修復時繼續。但是,如果你沒有法定人數的管理者,這個過程就會複雜得多。

首先,請注意節點ID(我將在此處稱爲$ WORKER_ID和$ MANAGER_ID)。

在管理器節點:

docker node update --availability drain $WORKER_ID 

^這是可選的,但對一大羣現場服務工作時,這是一個很好的習慣。

docker swarm join-token manager 

^這個命令會給你的加入命令它刪除後的每個節點上運行。我將在下面將它稱爲$ JOIN_COMMAND。一旦經理重新加入,我們將降級工人。

對工人:

docker swarm leave 
$JOIN_COMMAND 

此節點現在又重新加入了作爲一名經理,但我會繼續稱其爲「工人」,以避免混亂。

在經理:

docker node rm $WORKER_ID 
docker node update --availability drain $MANAGER_ID 
docker swarm leave -f 
$JOIN_COMMAND 
docker node rm $MANAGER_ID 
docker node ls 

找到工人的新ID(注意主機名,沒有作用) - > $ NEW_WORKER_ID

docker node demote $NEW_WORKER_ID 

你的羣應該被刷新 - 如果有更多的節點,每個運行在每個節點上的服務都會遷移到羣集中。

如果仍然不起作用(無論如何),你真的應該考慮升級到碼頭v17.06或更新版本。在此之前,Swarm網絡非常不穩定,造成很多來自競爭條件的問題。