简介
在这个实验中,你将学习如何通过聚焦于 docker plugin disable
命令来管理 Docker 插件。你将从列出当前已安装的插件开始,以了解它们的状态。接着,你将练习禁用一个插件,并观察此操作的效果。
本实验还将介绍如何验证插件是否已成功禁用。你还可以选择探索禁用插件可能受限的场景,例如当插件有活动引用时,以及如何强制禁用一个活动的插件。
在这个实验中,你将学习如何通过聚焦于 docker plugin disable
命令来管理 Docker 插件。你将从列出当前已安装的插件开始,以了解它们的状态。接着,你将练习禁用一个插件,并观察此操作的效果。
本实验还将介绍如何验证插件是否已成功禁用。你还可以选择探索禁用插件可能受限的场景,例如当插件有活动引用时,以及如何强制禁用一个活动的插件。
在这一步中,你将学习如何列出系统上当前已安装的 Docker 插件。Docker 插件可以扩展 Docker 的功能,提供诸如卷管理、网络和日志记录等特性。
要列出已安装的插件,你可以使用 docker plugin ls
命令。该命令将显示所有已安装插件的列表,以及它们的状态(启用或禁用)和其他相关信息。
让我们执行该命令来查看已安装的插件。
docker plugin ls
你应该会看到类似以下的输出,不过具体列出的插件可能会因你的环境而异:
ID NAME DESCRIPTION ENABLED
在默认的 LabEx 环境中,可能默认没有安装任何插件。上面的输出表明当前没有安装任何插件。如果你安装了插件,它们将在此处列出。
输出的列包括:
ID
:插件的唯一标识符。NAME
:插件的名称。DESCRIPTION
:对插件功能的简要描述。ENABLED
:指示插件当前是启用(true
)还是禁用(false
)。了解哪些插件已安装以及它们的状态是管理 Docker 插件的第一步。在接下来的步骤中,你将学习如何禁用和管理这些插件。
在这一步中,你将学习如何禁用已安装的 Docker 插件。禁用插件会停止其运行,并使 Docker 无法使用该插件的功能。
要禁用插件,你可以使用 docker plugin disable
命令,后跟你要禁用的插件的名称或 ID。
由于在此环境中默认没有安装任何插件,我们将首先安装一个简单的插件来演示禁用命令。我们将安装 vieux/sshfs
插件,该插件允许将远程 SSH 文件系统挂载为 Docker 卷。
首先,让我们安装该插件。此命令将拉取插件镜像并启用它。
docker plugin install vieux/sshfs
系统会提示你确认该插件的权限。输入 y
并按回车键继续。
Plugin "vieux/sshfs" is requesting the following privileges:
- network: [host]
- mount: [/dev/fuse]
- allow-host-dnsserver: true
- allow-other: true
- capability: [CAP_SYS_ADMIN]
Do you grant the plugin these privileges? [y/n] y
安装完成后,你可以通过再次列出插件来验证该插件是否已安装并启用:
docker plugin ls
你现在应该会看到 vieux/sshfs
被列出,且 ENABLED
设置为 true
。
ID NAME DESCRIPTION ENABLED
<plugin_id> vieux/sshfs Mount remote SSH filesystem true
现在,让我们使用其名称来禁用 vieux/sshfs
插件:
docker plugin disable vieux/sshfs
如果命令执行成功,你将看不到任何输出。这表明该插件已被禁用。
当你不再需要插件的功能或正在排查问题时,禁用插件会很有用。在下一步中,你将验证该插件是否确实已被禁用。
在这一步中,你将验证在上一步中禁用的 vieux/sshfs
插件确实已不再启用。
要检查已安装插件的状态,你可以再次使用 docker plugin ls
命令。该命令将显示所有插件的当前状态。
执行以下命令:
docker plugin ls
查看 vieux/sshfs
插件的输出。ENABLED
列现在应该显示 false
。
ID NAME DESCRIPTION ENABLED
<plugin_id> vieux/sshfs Mount remote SSH filesystem false
在 ENABLED
列中看到 false
就确认了该插件已成功禁用。当插件被禁用时,Docker 无法使用其功能。
此验证步骤对于确保你之前的命令达到了预期效果非常重要。在接下来的可选步骤中,你将探索禁用插件可能更复杂的场景。
在这个可选步骤中,你将尝试禁用一个当前正在使用或有资源依赖于它的插件。这将展示 Docker 如何处理此类情况。
首先,让我们重新启用 vieux/sshfs
插件,以便我们可以使用它。
docker plugin enable vieux/sshfs
现在,让我们创建一个使用 vieux/sshfs
插件的 Docker 卷。这将创建对该插件的依赖。
docker volume create --driver vieux/sshfs -o sshcmd=user@host:/path/to/dir -o IdentityFile=~/.ssh/id_rsa sshfs_volume
注意: 此命令可能会失败,因为你没有配置有效的 SSH 主机和密钥。这是预期的,其目的是创建一个 尝试 使用该插件的卷,从而创建一个引用。你将看到一条错误消息,表明卷创建失败。
现在,让我们在 sshfs_volume
卷存在的情况下再次尝试禁用 vieux/sshfs
插件,即使卷创建失败了。
docker plugin disable vieux/sshfs
你应该会看到类似这样的错误消息:
Error response from daemon: plugin vieux/sshfs is in use by volume sshfs_volume
出现此错误是因为 Docker 阻止你禁用当前被其他 Docker 资源(如卷)引用的插件。这是一种安全机制,可防止意外行为或数据丢失。
要在此场景中成功禁用该插件,你首先需要移除依赖资源(在这种情况下是卷)。让我们移除该卷:
docker volume rm sshfs_volume
现在,你应该能够禁用该插件了:
docker plugin disable vieux/sshfs
这次,命令应该会成功执行,不会出现错误消息。
此步骤说明 Docker 会管理依赖关系,并阻止你禁用正在被积极使用的插件。
在这个可选步骤中,你将学习如何强制禁用 Docker 插件。当插件卡住或无法正常禁用时,这有时是必要的。但是,要谨慎使用强制选项,因为如果插件正在被关键资源积极使用,这可能会导致意外行为。
首先,确保 vieux/sshfs
插件已启用。
docker plugin enable vieux/sshfs
现在,让我们尝试使用 -f
或 --force
标志来强制禁用该插件:
docker plugin disable -f vieux/sshfs
即使使用了强制标志,如果插件正在被运行中的容器或其他关键资源积极使用,Docker 可能仍然会阻止禁用操作,以避免系统不稳定。然而,对于像 vieux/sshfs
这样不积极管理运行中容器的简单插件,即使存在残留引用(尽管我们在上一步中已移除了卷引用),强制标志通常也会成功。
强制选项主要用于处理插件无响应或无法通过标准方法禁用的情况。它会尝试关闭插件进程并禁用它,而不管其当前状态或次要引用如何。
在尝试强制禁用后,你可以验证插件的状态:
docker plugin ls
vieux/sshfs
插件现在应该在列表中显示 ENABLED
为 false
。
ID NAME DESCRIPTION ENABLED
<plugin_id> vieux/sshfs Mount remote SSH filesystem false
至此,关于处理插件依赖和强制禁用的可选步骤结束。你已经学习了如何列出、禁用和验证 Docker 插件的状态,以及 Docker 如何处理禁用有引用的插件的尝试。
在这个实验中,你学习了如何管理 Docker 插件,特别关注了如何禁用它们。你首先使用 docker plugin ls
命令列出已安装的插件,以了解它们的状态并确定哪些插件处于活动状态。然后,你练习使用 docker plugin disable
命令禁用插件,展示了如何停止插件的功能。最后,你验证了插件是否已成功禁用。