Manage Docker Plugins with the docker plugin Command
docker plugin is the umbrella command for listing, inspecting, installing and removing Docker Engine managed plugins. Every plugin you enable is code with real access to your host, and this guide gives you a repeatable workflow for handling that safely. The examples use Docker Community Edition CLI 29.8.1, installed here as docker-ce-cli. Allow about fifteen minutes for an existing plugin, longer if you need to review a plugin's permissions before installing it.
The route
Jump straight to the step you need, or tick off Done means at the end.
Before you start
- A working Docker daemon and the
dockercommand. - Permission to talk to that daemon. On many Linux systems that means membership of the
dockergroup; on others, prefix commands withsudo. Use elevated privileges only where your setup actually requires them.
Warning
A plugin can request host networking, devices, mounts or Linux capabilities. Treat installation as a security-sensitive change, not a routine package install.
1. Check the command and daemon
The top-level manpage describes docker plugin as the command for managing plugins; its detailed behaviour is split across the subcommands. Start with the installed help and version:
$ docker --version
Docker version 29.8.1, build 4a63305
$ docker plugin --help
Usage: docker plugin COMMAND
Manage plugins
If your version differs, read that installation's subcommand help before copying an option into a script. If Docker cannot connect to the daemon, fix the daemon or context first; do not try to solve a connection problem by granting a plugin more privileges.
Checkpoint
This read-only command should return a table, even with no plugins installed:
$ docker plugin ls
ID NAME DESCRIPTION ENABLED
2. Inspect what is already installed
List plugins before changing anything. Filter the result when you need to find disabled plugins or a particular capability:
$ docker plugin ls --filter enabled=false
$ docker plugin ls --filter capability=volumedriver
$ docker plugin ls --format '{{.ID}} {{.Name}} enabled={{.Enabled}}'
The available capability filters are volumedriver, networkdriver, ipamdriver, logdriver, metricscollector and authz. An empty result means no installed plugin matches; it does not mean the plugin is safe or even available from a registry.
Use inspect for the detail that matters before enabling or changing a plugin:
$ docker plugin inspect PLUGIN_NAME
$ docker plugin inspect --format '{{.Enabled}} {{.Config.Env}}' PLUGIN_NAME
Swap in the exact name or ID from docker plugin ls for PLUGIN_NAME. Review the plugin's network mode, mounts, devices, capabilities, entrypoint, environment and arguments. The output is JSON by default. Do not paste secrets from environment settings or registry credentials into a ticket or shell history.
3. Install with permissions visible
Use the plugin publisher's documented reference, never an unverified name that just happens to look similar. This keeps the plugin disabled until you have reviewed it:
$ docker plugin install --disable VENDOR/PLUGIN:TAG
Plugin "VENDOR/PLUGIN:TAG" is requesting the following privileges:
...
Do you grant the above permissions? [y/N]
Read every requested privilege. A host network, a device such as /dev/fuse, a writable host mount or a capability such as CAP_SYS_ADMIN can materially expand what the plugin's code can do. Press N or interrupt the command if the request looks off.
Warning
--disable stops automatic enablement, but it does not make the plugin harmless: it still drops plugin data onto the Docker host. Installation is a state change and may pull an image from Docker Hub or another registry, so confirm the name, tag and publisher before you approve anything. Avoid --grant-all-permissions unless you have independently reviewed the full permission set and genuinely need every one of them.
Checkpoint
Confirm the installed plugin is present and disabled:
$ docker plugin ls --filter enabled=false
ID NAME DESCRIPTION ENABLED
PLUGIN_ID VENDOR/PLUGIN:TAG ... false
4. Enable only after the review
Enable the installed plugin by its name or ID:
$ docker plugin enable PLUGIN_NAME
VENDOR/PLUGIN:TAG
$ docker plugin ls --filter enabled=true
Enabling starts the plugin and makes its advertised driver available to Docker operations. It can fail here because a required host path, device, kernel feature or configuration value is missing. Check the daemon logs and rerun docker plugin inspect PLUGIN_NAME; do not reach for --timeout as a way to paper over a startup failure. The installed default timeout for enable is 30 seconds, and the option only changes the HTTP client timeout in seconds.
To stop a plugin without removing it, disable it:
$ docker plugin disable PLUGIN_NAME
VENDOR/PLUGIN:TAG
Disabling can disrupt containers or volumes that depend on the plugin, so check those consumers first. If Docker refuses because the plugin is active, the installed command offers docker plugin disable --force PLUGIN_NAME, but force can break workloads. Use it only in a controlled maintenance window, then verify the dependent services before restarting them.
5. Change settings only while disabled
docker plugin set changes supported environment variables, mount sources, device paths or arguments, and the plugin must be disabled first. Inspect the current value, make one deliberate change, then inspect it again:
$ docker plugin disable PLUGIN_NAME
$ docker plugin inspect --format '{{.Config.Env}}' PLUGIN_NAME
$ docker plugin set PLUGIN_NAME SETTABLE_KEY=VALUE
$ docker plugin inspect --format '{{.Config.Env}}' PLUGIN_NAME
$ docker plugin enable PLUGIN_NAME
Only use a key the plugin's configuration marks as settable; this is not a general-purpose edit mechanism. Record the old value before changing it. To undo the example, disable the plugin, set the key back to its recorded value, inspect the result, then enable it again. Restoring a mount source or device path can still affect running workloads, so verify the host path before re-enabling.
6. Remove a plugin when you have a rollback plan
Removal is the last step, not the first troubleshooting move. Disable the plugin and check that no container, volume or service still depends on it:
$ docker plugin disable PLUGIN_NAME
$ docker plugin rm PLUGIN_NAME
VENDOR/PLUGIN:TAG
$ docker plugin ls
docker plugin rm removes one or more installed plugins. The installed CLI also supports --force to remove an active plugin, but that is disruptive and can strand dependent Docker resources. Keep the exact image reference and any setting values in case you need to reinstall: a mutable tag can point at a newer image later, so pin a reviewed tag or digest when the publisher offers one.
Done means
- Inventory matches reality.
docker plugin lsshows the expected installed plugins and enabled states. - Permissions reviewed.
docker plugin inspecthas been checked for mounts, devices, capabilities, network mode and settings. - No blanket approvals. Installation permissions were approved deliberately, without reaching for
--grant-all-permissionsby habit. - Changes made while disabled. Settings were changed only with the plugin disabled, then verified before enabling it again.
- Disruptive actions were planned. Any disable, force or removal had a maintenance window and a recovery record.