我正在使用以下环境:带有 Docker CE 的 Debian 9:
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
# docker --version
Docker version 17.09.0-ce, build afdb6d4
#
docker node ls
:
# docker node ls | grep elk12
2keku0oj8zhsy6uyvyl4gd4d7 elk12 Down Active Reachable
tbwbpkl5qys4wwxbisga3y2oe * elk12 Ready Active Reachable
# docker node inspect elk12
[]
Status: Error response from daemon: node elk12 is ambiguous (2 matches found), Code: 1
#
我无法使用docker node rm elk12
,因为根据上面的输出我有 2。
如何从列表中删除“关闭”节点,最好不影响工作集群)。我不相信我还有那个节点(可能是很久以前的一些残留物)...
请指教。
更新:
# docker node rm 2keku0oj8zhsy6uyvyl4gd4d7
Error response from daemon: rpc error: code = FailedPrecondition desc = node 2keku0oj8zhsy6uyvyl4gd4d7 is a cluster manager and is a member of the raft cluster. It must be demoted to worker before removal
# docker node demote 2keku0oj8zhsy6uyvyl4gd4d7
Manager 2keku0oj8zhsy6uyvyl4gd4d7 demoted in the swarm.
# docker node rm 2keku0oj8zhsy6uyvyl4gd4d7
2keku0oj8zhsy6uyvyl4gd4d7
# docker node ls | grep elk12
tbwbpkl5qys4wwxbisga3y2oe elk12 Ready Active Reachable
#
答案1
解释了您遇到的具有相同名称但不同 ID 的重复节点的问题这里,可能是离开群集并重新加入群集的节点,管理器重新启动...
如果您想删除重复的节点并摆脱那个模棱两可的警告,您可以使用哈希 ID 而不是名称:
docker node rm 2keku0oj8zhsy6uyvyl4gd4d7
如果你想删除另一个名为 elk12 的节点,该节点似乎是一个管理器,因此你应该谨慎行事,因为如果没有足够的管理器,你可能会遇到麻烦达成共识。如果您觉得删除该管理器节点是安全的,因为您的群组中有足够的节点作为管理器运行,那么您应该执行以下操作:
- 降级管理节点(docker node demote)。这样该节点不再是管理节点,而是作为工作节点运行。
- 排空工作节点(docker node dry)。在 elk2 中运行的容器将被移动到集群中的其他工作节点。
- 让工作节点离开 Swarm(elk2 节点内部的 docker swarm leave)
- 删除节点(docker node rm ...)