Emacs integration for Docker!
Supports docker containers, images, volumes, networks, contexts and docker-compose.
The recommended way to install docker.el is through MELPA.
Here is a example use-package configuration:
(use-package docker
:ensure t
:bind ("C-c d" . docker))Use M-x docker, select a resource then mark or unmark items using the following keybindings (for more marking possibilities, check out https://github.com/emacsorphanage/tablist):
| Binding | Description |
|---|---|
| ? | List actions |
| l | Configure listing |
| m | Mark item |
| u | Unmark item |
| t | Toggle marks |
| U | Unmark all |
| s | Sort |
| * r | Mark items by regexp |
| < | Shrink column |
| > | Enlarge column |
| C-c C-e | Export to csv |
Then select an action and follow the instructions.
- docker container: attach, cp, diff, exec, inspect, kill, logs, pause, rename, restart, rm, start, stop, unpause
- docker image: history, inspect, pull, push, rm, run, tag
- docker network: rm
- docker volume: rm
- docker context: inspect, ls, rm, use
- docker-compose: build, config, create, down, exec, logs, pause, pull, push, remove, restart, run, start, stop, unpause, up
You can also enter dired or open a file inside a container or volume.
Thanks to transient, all the transients arguments can be set temporarily or permanently. See https://magit.vc/manual/transient/Saving-Values.html#Saving-Values for more information.
There are also hidden items (e.g on M-x docker where you could specify the host or TLS settings), see
https://magit.vc/manual/transient/Enabling-and-Disabling-Suffixes.html for more information.
Pressing the key of an option that is already set opens its current value for editing; clearing
the input unsets it. Options docker accepts several times (-e, -v, --mount, -p,
--network, --filter, compose --file, ...) take all their values in one prompt, separated by
|, so values may contain commas:
Mount volume (separate with |): type=bind,source=/data,target=/data | type=volume,source=cache,target=/cache
Each kind of value keeps its own history (M-p / M-n), shared between the transients that use
it and saved with the other transient histories.
Here is a list of other customizations you can set:
| Variable | Description | Default |
|---|---|---|
| docker-command | The docker binary to use | docker |
| docker-compose-command | The docker compose binary to use | docker compose |
| docker-container-columns | Columns definition for containers | Too complex to show |
| docker-container-default-sort-key | Sort key for containers | ("Image") |
| docker-container-exec-custom-args | Custom arguments to use for docker exec | nil |
| docker-container-exec-default-args | Base arguments to use for docker exec | ("-i" "-t") |
| docker-container-shell-file-name | Shell to use when entering containers | /bin/sh |
| docker-container-tramp-method | Tramp prefix when connecting to containers | docker |
| docker-context-columns | Columns definition for contexts | Too complex to show |
| docker-context-default-sort-key | Sort key for contexts | ("Name") |
| docker-image-columns | Columns definition for images | Too complex to show |
| docker-image-default-sort-key | Sort key for images | ("Repository") |
| docker-image-history-columns | Columns definition for image history | Too complex to show |
| docker-image-history-default-sort-key | Sort key for image history | ("Created" . t) |
| docker-image-run-custom-args | Custom arguments to use for docker run | nil |
| docker-image-run-default-args | Base arguments to use for docker run | ("-i" "-t" "--rm") |
| docker-inspect-view-mode | Mode used in docker inspect buffers |
Too complex to show |
| docker-network-columns | Columns definition for networks | Too complex to show |
| docker-network-default-sort-key | Sort key for networks | ("Name") |
| docker-pop-to-buffer-action | Action for docker-utils-pop-to-buffer |
nil |
| docker-show-messages | If non-nil message docker commands | t |
| docker-show-status | When to compute status | local-only |
| docker-terminal-backend | Terminal backend for live buffers | auto |
| docker-volume-columns | Columns definition for volumes | Too complex to show |
| docker-volume-default-sort-key | Sort key for volumes | ("Driver") |
You can match on the repository name for an image to customize the initial infix arguments via docker-image-run-custom-args:
(add-to-list
'docker-image-run-custom-args
`("^postgres" ("-e POSTGRES_PASSWORD=postgres" . ,docker-image-run-default-args)))So when docker run is called on an image whose repository name matches the regular expression ^postgres, the option
"-e POSTGRES_PASSWORD=postgres" will appear as set along with the defaults specified by docker-image-run-default-args.
The same mechanism is available for docker exec via docker-container-exec-custom-args and
docker-container-exec-default-args, except the regular expression is matched against the container name instead of the
image repository.
Commands that need a running buffer (for example docker run, docker logs, etc) use the backend selected by
docker-terminal-backend. When set to auto, it prefers eat,
then ghostel, then vterm,
then shell.
Non-interactive streaming buffers (for example docker logs -f) always use a shell buffer so output can be
rendered with ANSI color and kept read-only.
The simplest setup is to add your user to the docker group, so no root access is needed.
Otherwise, docker.el runs everything from default-directory, which also decides the host. Open a
sudo directory and run M-x docker from there: docker commands started from it run as
root, on that host.
M-x docker-open-dired-as-root opens the current directory as root in dired, locally
or on the current remote host. With a prefix argument, it asks which directory to open.
This replaces the obsolete docker-run-as-root option, which only applied to the docker commands
run on the local machine and left out the terminals and container shells.
The same by hand:
C-x d /sudo::/path/to/project/ RET
C-x d /ssh:myhost|sudo:myhost:/path/to/project/ RET
They are very welcome, either as suggestions or as pull requests by opening tickets on the issue tracker.

