Skip to content

Instantly share code, notes, and snippets.

@celadevra
Created July 31, 2017 07:36
Show Gist options
  • Save celadevra/2a7cc70d9f6697a1a841896639be5e27 to your computer and use it in GitHub Desktop.
Save celadevra/2a7cc70d9f6697a1a841896639be5e27 to your computer and use it in GitHub Desktop.
Tramp and docker #emacs

Insert a tramp method called 'docker':

;; Open files in Docker containers like so: /docker:drunk_bardeen:/etc/passwd
(push
 (cons
  "docker"
  '((tramp-login-program "docker")
    (tramp-login-args (("exec" "-it") ("%h") ("/bin/bash")))
    (tramp-remote-shell "/bin/sh")
    (tramp-remote-shell-args ("-i") ("-c"))))
 tramp-methods)

Let tramp deal with file name completion in docker container:

(defadvice tramp-completion-handle-file-name-all-completions
  (around dotemacs-completion-docker activate)
  "(tramp-completion-handle-file-name-all-completions \"\" \"/docker:\" returns
    a list of active Docker container names, followed by colons."
  (if (equal (ad-get-arg 1) "/docker:")
      (let* ((dockernames-raw (shell-command-to-string "docker ps | awk '$NF != \"NAMES\" { print $NF \":\" }'"))
             (dockernames (cl-remove-if-not
                           #'(lambda (dockerline) (string-match ":$" dockerline))
                           (split-string dockernames-raw "\n"))))
        (setq ad-return-value dockernames))
    ad-do-it))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment