The 'plugin not found' error occurs when Docker cannot locate a volume driver plugin that was specified in a volume definition. Install the required plugin, verify its name, or switch to the default 'local' driver.
The "plugin not found" error in Docker occurs when you attempt to create or use a volume with a volume driver that Docker cannot locate. This typically appears as `Error response from daemon: plugin "drivername" not found` when running commands like `docker volume create` or `docker run` with volume mounts. Docker volume plugins extend Docker's storage capabilities by allowing volumes to be backed by external storage systems like NFS, cloud storage (AWS EBS, Azure Files), or distributed storage solutions. When you specify a driver with `--driver` or in a Docker Compose file's `volumes` section, Docker looks for that plugin in its plugin registry. The error means Docker searched for the named plugin but couldn't find it. This can happen because the plugin was never installed, it was installed but not enabled, its name was misspelled, or you're confusing a volume plugin with a storage driver (which are different concepts in Docker).
First, check which plugins are currently installed and their status:
# List all installed plugins with their status
docker plugin ls
# Output shows NAME, TAG, DESCRIPTION, ENABLED
# Example output:
# NAME TAG DESCRIPTION ENABLED
# vieux/sshfs latest sshFS plugin for Docker trueIf the plugin you need isn't listed, you'll need to install it. If it's listed but shows ENABLED: false, you need to enable it.
Also check Docker's info for plugin directories:
docker info | grep -i pluginInstall the volume driver plugin from Docker Hub or another registry:
# Install a plugin from Docker Hub
docker plugin install <plugin-name>
# Common volume plugins:
docker plugin install vieux/sshfs # SSH/SFTP volumes
docker plugin install rexray/ebs # AWS EBS volumes
docker plugin install local-persist # Local persistent volumes
docker plugin install convoy # Convoy for NFS/EBS
# Install with permissions auto-granted (non-interactive)
docker plugin install --grant-all-permissions <plugin-name>During installation, Docker may prompt you to grant certain capabilities to the plugin. Review these carefully before accepting.
Note: Some plugins require configuration options during install:
docker plugin install rexray/ebs EBS_ACCESSKEY=xxx EBS_SECRETKEY=yyyIf the plugin is installed but disabled, enable it:
# Enable a specific plugin
docker plugin enable <plugin-name>
# Example
docker plugin enable vieux/sshfs
# Verify it's now enabled
docker plugin lsIf enabling fails, check the plugin's logs for configuration issues:
# Inspect plugin configuration
docker plugin inspect <plugin-name>
# Check Docker daemon logs for plugin errors
sudo journalctl -u docker | grep -i pluginPlugin names are case-sensitive and must match exactly. Common mistakes:
# WRONG - these will fail:
docker volume create --driver SSHFS myvolume # Wrong case
docker volume create --driver sshfs myvolume # Missing vendor prefix
docker volume create --driver vieux-sshfs myv # Dash instead of slash
# CORRECT:
docker volume create --driver vieux/sshfs myvolumeCheck the exact plugin name from Docker Hub or the plugin's documentation:
# Search Docker Hub for volume plugins
docker search volume --filter is-official=false
# Check installed plugin's exact name
docker plugin ls --format '{{.Name}}'For Docker Compose, ensure the driver name matches:
volumes:
mydata:
driver: vieux/sshfs # Must match exactly
driver_opts:
sshcmd: "user@host:/path"If you don't actually need an external storage plugin, use Docker's built-in local driver:
# Create a volume with the default local driver
docker volume create myvolume
# Or explicitly specify local driver
docker volume create --driver local myvolumeFor Docker Compose, you can often omit the driver entirely:
# Using default local driver
volumes:
mydata:
# Or for local driver with options (NFS mount)
volumes:
nfsdata:
driver: local
driver_opts:
type: nfs
o: addr=nfs-server.example.com,rw
device: ":/path/to/share"The local driver supports NFS, CIFS, and other mount types through driver_opts without requiring additional plugins.
Older Docker installations used a different plugin system. If you're migrating from an older setup, check for legacy plugin configurations:
# Check legacy plugin directories
ls -la /etc/docker/plugins/
ls -la /usr/lib/docker/plugins/
ls -la /run/docker/plugins/
# Legacy plugins use .spec or .sock files
# Modern plugins (v2) are managed via docker plugin commandsIf you find legacy plugin files, the plugin may need to be reinstalled using Docker's current plugin system:
# Remove legacy plugin files (backup first)
sudo mv /etc/docker/plugins/myplugin.spec /etc/docker/plugins/myplugin.spec.bak
# Install using modern plugin system
docker plugin install <plugin-name>Note: Legacy plugins (v1) are deprecated. Consider migrating to v2 plugins or using the local driver with mount options.
After installing or enabling plugins, restart the Docker daemon to ensure it recognizes the changes:
# Linux (systemd)
sudo systemctl restart docker
# Linux (service)
sudo service docker restart
# macOS / Windows
# Restart Docker Desktop from the system trayThen verify the plugin is working:
# Check plugin status
docker plugin ls
# Test volume creation
docker volume create --driver <plugin-name> test-volume
# Clean up test volume
docker volume rm test-volume### Storage Drivers vs Volume Plugins
Docker has two different plugin concepts that are often confused:
| Feature | Storage Driver | Volume Plugin |
|---------|---------------|---------------|
| Purpose | How Docker stores images/containers | External storage for volumes |
| Set via | dockerd --storage-driver | docker volume create --driver |
| Examples | overlay2, btrfs, devicemapper | vieux/sshfs, rexray/ebs |
| Scope | Docker Engine level | Individual volumes |
Using --volume-driver=btrfs won't work because btrfs is a storage driver, not a volume plugin. If you want btrfs for volumes, use the local driver with btrfs mount options.
### Plugin Architecture (v2)
Modern Docker plugins (v2) run as containers themselves. They communicate with Docker through a well-defined API:
/run/docker/plugins/<plugin-id>.sock # Plugin socket
/var/lib/docker/plugins/ # Plugin stateIf a plugin isn't responding, check if its container is running:
# List plugin containers (they run in a special namespace)
docker plugin inspect <plugin> --format '{{.PluginReference}}'### Cloud Provider Volume Plugins
Common cloud storage plugins and their status:
| Cloud | Plugin | Status |
|-------|--------|--------|
| AWS EBS | rexray/ebs | Active |
| Azure Files | azure_file | Deprecated (use AKS) |
| GCE PD | gceplug | Community maintained |
| DigitalOcean | rexray/dobs | Active |
Warning: Some plugins like the Azure Files driver have been abandoned. If you encounter a deprecated plugin, consider:
1. Using Kubernetes with native cloud storage integration
2. Using the local driver with cloud-mounted filesystems
3. Using NFS with cloud-provided NFS services
### Plugin Permissions and Capabilities
Volume plugins often request elevated permissions:
# See what permissions a plugin requests before installing
docker plugin inspect <plugin> --format '{{.Config.Linux}}'Common capabilities requested:
- CAP_SYS_ADMIN: Required for mount operations
- Network access: For remote storage backends
- Device access: For block storage
### Debugging Plugin Issues
# View plugin logs
journalctl -u docker | grep <plugin-name>
# Check plugin health
docker plugin inspect <plugin> --format '{{.Enabled}}'
# Force disable and re-enable
docker plugin disable --force <plugin>
docker plugin enable <plugin>
# Completely reinstall
docker plugin rm --force <plugin>
docker plugin install <plugin>### Docker Compose and Plugin Dependencies
When using plugins in Docker Compose, ensure all machines in a Swarm have the plugin installed:
version: "3.8"
services:
app:
image: myapp
volumes:
- data:/app/data
volumes:
data:
driver: vieux/sshfs
driver_opts:
sshcmd: "user@server:/data"
password: "secret" # Consider using Docker secrets insteadIn Swarm mode, the volume plugin must be installed on every node where the service might be scheduled.
image operating system "linux" cannot be used on this platform
How to fix 'image operating system linux cannot be used on this platform' in Docker
manifest unknown: manifest unknown
How to fix 'manifest unknown' in Docker
cannot open '/etc/passwd': Permission denied
How to fix 'cannot open: Permission denied' in Docker
Error response from daemon: failed to create the ipvlan port
How to fix 'failed to create the ipvlan port' in Docker
toomanyrequests: Rate exceeded for anonymous users
How to fix 'Rate exceeded for anonymous users' in Docker Hub