:tools docker

I heard you like OSes, so I…

1. Description

This module allows you to manipulate Docker images, containers & more from within Emacs and provides the dockerfile-mode major mode to edit Dockerfiles. Additional convenience functions are provided to make building images easier.

Also, docker-tramp offers a TRAMP method for Docker containers.

1.1. Maintainers

This module has no dedicated maintainers. Become a maintainer?

1.2. Module flags

Enable LSP support for dockerfile-mode. Requires :tools lsp and a langserver (supports dockerfile-language-server-nodejs).

1.4. Hacks

No hacks documented for this module.

2. Prerequisites

This module assumes docker, docker-compose and docker-machine binaries are installed and accessible from your PATH.

Optionally, LSP users will need docker-langserver:

$ npm install -g dockerfile-language-server-nodejs

3. Usage

3.1. Docker control

Use M-x docker, select a resource, and then mark or unmark items using the following keybindings (for more marking possibilities, check out https://github.com/politza/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

3.1.1. Supported commands

  • docker container: attach, cp, diff, inspect, kill, logs, pause, rename, restart, rm, start, stop, unpause
  • docker image: inspect, pull, push, rm, run, tag
  • docker network: rm
  • docker volume: rm
  • docker-machine: create, env, restart, rm, start, stop
  • docker-compose: build, config, create, down, exec, logs, pull, push, remove, restart, run, start, stop, up

You can also enter dired or open a file inside a container or volume.

3.2. TRAMP

Offers the TRAMP method docker to access running containers.

C-x C-f /docker:user@container:/path/to/file
user the user that you want to use (optional)
container the id or name of the container

4. Configuration

4.1. Popups

Thanks to magit-popup, all the popups default arguments can be customized. For example, here is how to customize the arguments for docker-image-run-popup:

(setq docker-image-run-arguments '("-i" "-t" "--rm"))

or inside a use-package declaration:

(use-package! docker
  :bind ("C-c d" . docker)
  :custom (docker-image-run-arguments '("-i" "-t" "--rm")))

4.1.1. Other useful variables

Variable Description Default
docker-command The docker binary to use docker
docker-container-default-sort-key Sort key for docker containers ("Image")
docker-container-shell-file-name Shell to use when entering containers /bin/bash
docker-image-default-sort-key Sort key for docker images ("Repository")
docker-machine-default-sort-key Sort key for docker machines ("Name")
docker-network-default-sort-key Sort key for docker networks ("Name")
docker-run-as-root Run docker as root nil
docker-volume-default-sort-key Sort key for docker volumes ("Driver")

4.2. Completion in Dockerfiles

By default, the keyword completion function detects the docker-compose version of the current buffer and suggests the appropriate keywords.

You can change the candidates offered by the backend by customizing docker-compose-keywords.

5. Troubleshooting

5.1. Tramp hangs on Alpine container

Busyboxes built with the ENABLE_FEATURE_EDITING_ASK_TERMINAL config option also send escape sequences, which tramp-wait-for-output doesn’t ignore correctly. This was fixed in TRAMP upstream and is available since TRAMP 2.3.

For older versions of TRAMP you can dump docker-tramp-compat.el in your load-path somewhere and add the following to your init.el to overwrite tramp-wait-for-output with the patch applied:

(require 'docker-tramp-compat)

6. TODO Appendix

This module has no appendix yet. Write one?