Public | Automated Build

Last pushed: 12 days ago
Short Description
Emacs with GUI for MacOS, Windows, GNU/Linux and your web browser
Full Description

Dockerized Emacs with GUI(Mac, Windows, GNU/Linux and your browser)

Images are clickable

docker-x11-bridge + a web browser


  • Reap the benefits of Emacs and other GNU/Linux tools on Windows/MacOS machines
  • Use docker hub to auto-build your environment and store full backups for free
  • Build once and work with the same development environment everywhere
  • Run untrusted/risky code in the tunable sandbox with CPU/network/disk quotas
  • Try new tools, experiment and roll back changes when something goes wrong
  • Share your setup with others or extend someone else’s development environment
  • Run multiple Emacs instances on the same machine isolated
  • An easy way to swap Emacs version (emacs25,emacs24,emacs-snapshot) for debugging
  • Pause container to free resources temporarily
  • Checkpoint & Restore - maybe the fastest way to start a “heavy” environment
  • Friendly for networks with low upload speed/quotas


How to use

First get docker for your OS.
Then you can use one of the images as a base(FROM) for your Dockerfile.
Simple example, Spacemacs distribution.
It will allow you to install and backup additional software/package dependencies. With Dockerfile ADD instruction
you can extract your .emacs.d from archives and remote repositories like GitHub using URL.
Also you can simply run one of the images:


Get XQuartz

open -a XQuartz

In the XQuartz preferences, go to the “Security” tab and make sure you’ve got “Allow connections from network clients” ticked

ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
xhost + $ip
docker run -ti --name emacs\
 -e DISPLAY=$ip:0\
 -e UNAME="emacser"\
 -e GNAME="emacsers"\
 -e UID="1000"\
 -e GID="1000"\
 -v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
 -v <path_to_your_workspace>:/mnt/workspace\
 jare/emacs emacs


other method


Get Cygwin with xinit, xorg-server and optionaly winpty(to run Emacs container with -t)

export DISPLAY=<your-machine-ip>:0.0
startxwin -- -listen tcp &
xhost + <your-machine-ip>
docker run --name emacs\
 -e UNAME="emacser"\
 -e GNAME="emacsers"\
 -e UID="1000"\
 -e GID="1000"\
 -v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
 -v <path_to_your_workspace>:/mnt/workspace\
 jare/emacs emacs

Or with -ti via winpty

winpty docker run -ti --name emacs\
 -e UNAME="emacser"\
 -e GNAME="emacsers"\
 -e UID="1000"\
 -e GID="1000"\
 -v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
 -v <path_to_your_workspace>:/mnt/workspace\
 jare/emacs emacs

You can use @ninrod 's setup


UID and preferably UNAME should match the host's user id.
Also make sure that $DISPLAY variable is set

docker run -ti --name emacs -v /tmp/.X11-unix:/tmp/.X11-unix:ro\
 -e UNAME="emacser"\
 -e GNAME="emacsers"\
 -e UID="1000"\
 -e GID="1000"\
 -v <path_to_your_.emacs.d>:/home/emacs/.emacs.d\
 -v <path_to_your_workspace>:/mnt/workspace\
 jare/emacs emacs

That's it! Now you should see Emacs window.

If it doesn't work

You may need to allow local connection for the user
UNAME should match the hosts user id.

xhost +si:localuser:<UNAME>

Or allow local connection from the container's hostname(This should work with any UID)

xhost +local:`docker inspect --format='{{ .Config.Hostname }}' emacs`


Also you can run it with docker-x11-bridge
  • Same client for GNU/Linux, Windows and MacOS + web browser
  • Persistent server (you can connect and disconnect without disrupting Emacs)
  • Interactive screen sharing demo
  • Use Emacs in web-browser (O_O) demo
  • Lag spikes with some OSes
Basic docker commands to get you started:
  • docker rm -f emacs - remove emacs container
  • docker restart emacs - restart emacs container
  • docker rmi -f jare/emacs - remove jare/emacs image
  • docker pull jare/emacs - get newer jare/emacs version
  • docker images -a - list all images
  • docker ps -a - list all containers
  • docker run ... jare/emacs - run the default command
  • docker run -ti ... jare/emacs /bin/bash - start bash
  • docker exec emacs /usr/bin/emacs - start /usr/bin/emacs in the running emacs container
  • docker logs emacs - print emacs container's logs
  • docker run ... -p 8080:8080 ... jare/emacs - access container's server from localhost:8080
  • docker cp <from_my_local_machine_path> emacs:/<to_my_emacs_container_path>
  • docker cp emacs:/<from_my_emacs_container_path> <to_my_local_machine_path>
  • Manage data in containers with Docker volumes. Example:
    • docker volume create --name my-workspace
    • docker run ... -v my-workspace:/mnt/workspace ... jare/emacs
    • docker run ... -v my-workspace:/home/developer/workspace ... jare/vim-bundle
Docker Pull Command
Source Repository