Manage Docker Plugins Without Losing Track of Their Privileges
You will finish with a repeatable workflow for listing, inspecting, installing and removing Docker Engine managed plugins. The examples use Docker Community Edition CLI 29.8.1, installed here as docker-ce-cli. Allow about fifteen minutes for an existing plugin, or longer if you must 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.
You need a working Docker daemon, the docker command, and permission to talk to that daemon. On many Linux systems that means membership of the docker group; on others, prefix the Docker commands with sudo. Use elevated privileges only where your Docker setup requires them. The plugin itself can request host networking, devices, mounts or Linux capabilities, so treat installation as a security-sensitive change.
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, so begin 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 the version differs, read that installation's subcommand help before copying an option into a script. If Docker reports that it cannot connect to the daemon, fix the daemon or context first. Do not try to solve a daemon connection problem by granting a plugin more privileges.
Checkpoint: this read-only command should return a table, even when no plugins are 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 include volumedriver, networkdriver, ipamdriver, logdriver, metricscollector and authz. An empty result means that no installed plugin matches; it does not mean the plugin is safe or available from a registry.
Use inspect for the details that matter before enabling or changing a plugin:
$ docker plugin inspect PLUGIN_NAME
$ docker plugin inspect --format '{{.Enabled}} {{.Config.Env}}' PLUGIN_NAME
Replace PLUGIN_NAME with the exact name or ID from docker plugin ls. Review the plugin's network mode, mounts, devices, capabilities, entrypoint, environment and arguments. The inspect 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, not an unverified name that happens to look similar. This example 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, device such as /dev/fuse, writable host mount or capability such as CAP_SYS_ADMIN can materially expand what plugin code can do. Press N or interrupt the command if the request is not expected. The --disable option prevents automatic enablement, but it does not make the plugin harmless: it still places plugin data on the Docker host.
Installation is a state change and may pull an image from Docker Hub or another registry. Confirm the name, tag and publisher before approving it. Avoid --grant-all-permissions unless you have independently reviewed the complete permission set and explicitly need every requested privilege.
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. A plugin 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 immediately use --timeout as a way to hide a startup failure. The installed default timeout for enable is 30 seconds, and the option 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. 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 during 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
Use only a key marked settable by the plugin's configuration. The command does not provide a general-purpose edit mechanism. Record the old value before changing it. To undo this example, disable the plugin, set the key back to its recorded value, inspect the result, and 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 shortcut. 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 if you may need to reinstall. Reinstallation is not a guaranteed rollback: a mutable tag may point to a newer image, so pin a reviewed tag or digest when the publisher provides one.
Done means
docker plugin lsshows the expected installed plugins and enabled states.docker plugin inspecthas been reviewed for mounts, devices, capabilities, network mode and settings.- Installation permissions were approved deliberately, without using
--grant-all-permissionsby habit. - Changes were made only while the plugin was disabled, then verified before enablement.
- Any disable, force or removal action had a maintenance window and a recovery record.