Docker Engine supports a plug-in system that allows you to add additional functionality to the container runtime environment. Plugins for new storage drivers, networking stacks, and logging systems are all available for free.
Modern versions of Docker Engine include everything you need to manage plugins in the CLI. We focus on this “managed” plugin system in this guide. You must manually install and maintain the plugins that use the legacy plugin system.
All about plugins
Plugins extend Docker Engine with new features that are too specific to ship with the general installation. Normally, you don’t directly interact with the plugins. Once a plugin is installed, you can reference the resources it provides when running existing Docker commands.
There are three main types of plugins:
- Registration – These plugins add new logging drivers, allowing you to store logs in locations outside of Docker Engine and your host machine.
- Network – Networking plug-ins can add support for new network types and related functionality.
- Volume – Storage plugins bring additional file systems and volume drivers to Docker, giving you more options for persistent data.
The plugins are distributed via Docker Hub. You can find the available plugins by going to the Explore page and selecting the Plugins tab at the top. More than 600 plugins are currently available.
If you are writing your own plugin, you can submit it to Docker Hub with the
docker plugin push order. It works the same as pushing an image into the public registry. You have to run
docker plugin create first to convert your plugin’s manifest and filesystem into a ready-to-submit package. You can get more information about creating plugins in the Docker documents.
Install a plugin
The plugins are installed with the
docker plugin install order. This accepts the name of a Docker Hub plugin as an argument:
docker plugin install store/example/example-plugin:version
Plugin references look like image references that start with
store/. The same markup principles apply when specifying which plugin version to install. Unlike images, you cannot omit the version to automatically extract the
You can find a plugin’s version number and copy an out-of-the-box installation command by clicking the “Setup Instructions” button on its Docker Hub page. Free plugins will allow you to switch to a new screen with the normal copy-paste box at the top right. Run the command in your terminal to start the plugin installation.
Plugins typically request access to host privileges so that they can provide their functionality. For example, a network plugin will need to have access to Docker
host network so that it can connect new resources. Confirm the permission prompt by typing
y and press Enter to complete the installation. You can ignore the prompt by adding the
--grant-all-permissions flag to your
install order; this is ideal for non-interactive installations but risks granting unintentional permissions if a plugin is updated with new features.
The plugins are automatically activated after installation. Activating a plugin allows the execution of pre-installation scripts. Use the
--disable flag to set a plugin to the disabled state by default, leaving it inert until it is manually enabled later.
Viewing plug-in details
Once installed, your plugin will be displayed during execution
docker plugin ls:
docker plugin ls
More detailed information on a single plugin can be obtained from the
docker inspect order. This accepts a plug-in ID or tag and displays a detailed JSON that describes the plug-in manifest:
docker inspect eccffc
The Docker CLI does not have a built-in way to install plugins offline. However, you can add plugins to an empty Docker installation by installing them first on a network client and then copying the plug-in files to the offline system.
You will find the plugins installed in the
/var/lib/docker/plugins directory on your host. Each plugin gets its own subdirectory named with its ID. These identifiers are visible in the output of the
docker plugin ls order.
Activation and deactivation of plugins
Plugins can be enabled or disabled. You will see the current status in the last column of the
ls to go out. A disabled plugin will not be loaded, so it will act as if it is not installed.
docker plugin enable and
docker plugin disable commands to change the status of a plugin. Provide the ID of one of your installed plugins as the only argument to the command:
docker plugin enable eccffc
You may not be able to deactivate a plugin if it is actively in use by your Docker Engine configuration or one of your containers. Addition of
-f flag will force the plug-in to be disabled but should be used sparingly as you risk unintentional container exits.
The plugins are uninstalled with the
docker plugin rm order. Provide the ID or name of a plugin to completely remove it from Docker.
rm has the same behaviors as
disable when managing actively used plugins and forced deletions afterwards.
Modifying plugin settings
Docker’s plugin system includes a built-in mechanism for plugin authors to expose customizable settings. As a user, you can change these settings via the
docker plugin set order:
docker plugin set example-plugin setting-key=new-value
example-plugin with the ID or name of the plugin you are targeting. The value of the plugin
setting-key the setting will be updated to
The available parameters naturally vary from one plugin to another. They must be documented in the plugin description on Docker Hub. The Docker CLI doesn’t have a built-in command to display all the settings available for a plugin, but they do show up in
docker plugin inspect to go out. Look for the
Settings field in the JSON representation of a plugin; it will contain objects with
Settable fields for options that you can change via the CLI.
Update your plugins
The plugins are updated with the
docker plugin update order. Like other commands, it takes a plugin id or tag as an argument.
Upgrading a plugin will download and install the latest version available on Docker Hub. If you are already using the latest version, the command will reinstall the current version. You will be prompted to grant the plugin any new privileges it needs. the
--grant-all-permissions flag is accepted to ignore the prompt in environments where interactive input is not possible.
There is no way to update all the plugins on your system with one command. It’s best to subscribe to release announcements from your plugin vendors and then apply updates to your installation as they become available. This will ensure that your plugins remain secure and supported.
The Docker plugin ecosystem allows you to add additional functionality to Docker Engine. The plugins reside on Docker Hub and can be installed from your terminal. The CLI has a built-in plugin updater, but it only works with one plugin at a time, not your entire catalog.
Now that you know how to use and manage plugins, you can start browsing Docker Hub for options to improve your workflow. Elastic logging plugin streams Docker container logs to an Elastic stack cluster, vSphere for Docker allows you to use VMWare vSphere storage for your persistent volumes, and Weaving net brings encrypted multicast networking to Docker. If you don’t see what you need, use the Plugin API to try to write your own solution that you can publish to the whole community through the Hub.