如何使用 docker swarm unlock 命令解锁集群管理节点

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何使用 docker swarm unlock 命令,在启用自动锁定功能并重启 Docker 守护进程后解锁 Docker 集群管理器。我们将首先启用自动锁定功能来初始化一个集群,这将生成一个唯一的解锁密钥。

接下来,我们将在管理节点上模拟 Docker 守护进程重启,以触发自动锁定机制。最后,你将使用之前获取的解锁密钥配合 docker swarm unlock 命令,成功解锁集群管理器,使其恢复运行。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/SystemManagementGroup -.-> docker/system("Manage Docker") subgraph Lab Skills docker/ps -.-> lab-555244{{"如何使用 docker swarm unlock 命令解锁集群管理节点"}} docker/restart -.-> lab-555244{{"如何使用 docker swarm unlock 命令解锁集群管理节点"}} docker/system -.-> lab-555244{{"如何使用 docker swarm unlock 命令解锁集群管理节点"}} end

启用自动锁定功能初始化集群

在这一步中,我们将启用自动锁定功能来初始化一个 Docker 集群。自动锁定功能要求在重启 Docker 守护进程后使用密钥来解锁集群,从而有助于保护集群免受未经授权的访问。

首先,让我们来初始化集群。我们将使用带有 --autolock 标志的 docker swarm init 命令。

docker swarm init --autolock

你应该会看到类似以下的输出,这表明集群已初始化并生成了一个解锁密钥。请务必复制该解锁密钥,因为你将在下一步中用到它。

Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

To unlock the swarm after it restarts, run the `docker swarm unlock` command and provide the following key:

    Swarm unlock key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

输出中提供了将工作节点或管理节点加入集群的命令,重要的是还给出了 Swarm unlock key(集群解锁密钥)。在 Docker 守护进程重启后,此密钥对于解锁集群至关重要。

在管理节点上重启 Docker 守护进程

在这一步中,我们将在管理节点上模拟 Docker 守护进程的重启。这将展示我们在上一步中启用的自动锁定功能的效果。

要重启 Docker 守护进程,我们将使用 systemctl restart docker 命令。由于此操作需要 root 权限,我们将使用 sudo

sudo systemctl restart docker

命令执行后,Docker 守护进程将先停止,然后重新启动。这模拟了服务器重启或手动重启 Docker 服务的情况。

现在,让我们尝试运行一个简单的 Docker 命令,以查看集群的状态。我们将使用 docker node ls

docker node ls

你应该会看到一条错误消息,表明集群已被锁定,需要解锁才能使用。这证实了自动锁定功能正在按预期工作。输出将类似于以下内容:

Error: swarm is encrypted and needs to be unlocked before it can be used. Please use "docker swarm unlock" to unlock it.

此错误消息是预期的,因为由于 Docker 守护进程的重启,集群现在已被锁定。在下一步中,我们将使用在第一步中获取的解锁密钥来解锁集群。

使用 docker swarm unlock 解锁管理节点

在这一步中,我们将使用在第一步中获取的解锁密钥来解锁 Docker 集群。这样我们就可以再次与集群进行交互。

回想一下在第一步初始化集群时显示的解锁密钥。你需要将此密钥提供给 docker swarm unlock 命令。

使用 docker swarm unlock 命令,后面跟上 --unlock-key 标志和你复制的解锁密钥。将 YOUR_UNLOCK_KEY 替换为实际的密钥。

docker swarm unlock --unlock-key YOUR_UNLOCK_KEY

使用正确的解锁密钥执行命令后,集群应该会被解锁。你应该会看到表明集群已成功解锁的输出。

Swarm unlocked.

现在集群已解锁,让我们通过列出集群中的节点来验证是否可以再次与它进行交互。

docker node ls

你现在应该会看到管理节点的详细信息,这表明集群已正常运行。输出将类似于以下内容:

ID                            HOSTNAME            STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
xxxxxxxxxxxx   labex-vm            Ready     Active         Leader           20.10.21

这证实了你已在守护进程重启后成功解锁了 Docker 集群。

总结

在本次实验中,我们学习了如何在启用自动锁定功能初始化集群后,在 Docker 守护进程重启时使用 docker swarm unlock 命令解锁集群管理节点。我们首先使用 docker swarm init --autolock 初始化了一个 Docker 集群,该命令会生成一个唯一的解锁密钥,此密钥对于在重启后重新访问集群至关重要。然后,我们使用 sudo systemctl restart docker 在管理节点上模拟了 Docker 守护进程的重启,以此触发自动锁定机制。这展示了在初始化过程中获取的解锁密钥的重要性。