Quicklisp is installed in /opt/quicklisp. We provide
different versions (tags) for different distributions of Quicklisp:
x.y.zcontains the corresponding sbcl version (built with
build option 'fancy'), and the 'current' Quicklisp version (current
at container build time) with no systems pre-installed
YYYY-MM-DD, where all package archives are downloaded into the
The latter image is large (400-500 MB) but contains all of Quicklisp,
so no Internet connectivity is needed for
Sources can be mounted into the image into /common-lisp.
Compiled files are cached in the directory /cache.
The userid and groupid of the sbcl process can be specified explicitly.
How to use
We assume that you keep your own source files in
the cache location is the default one
~/.cache. Then you can use the
docker run -it -v ~/common-lisp:/common-lisp -v ~/.cache:/cache mcreations/sbcl
It is possible to override the quicklisp installation inside the
container with the one which you have (default location
docker run -it -v ~/quicklisp:/opt/quicklisp -v ~/common-lisp:/common-lisp -v ~/.cache:/cache mcreations/sbcl
User ID and Group ID
The sbcl process inside the container runs with UID 1000 and GID 1000.
If you specify host volumes to be mounted inside the container, then
you should set the env var
RUN_AS to your own UID and GID. The files
which are created by sbcl will then have the correct user and group:
docker run -it -e RUN_AS=`id -u`:`id -g` -v ~/quicklisp:/opt/quicklisp -v ~/common-lisp:/common-lisp -v ~/.cache:/cache mcreations/sbcl
During startup, the startup script modifies owner and group of the directories
to match the value of
Note that this will take quite some time, so you should always run the
image with the same
RUN_AS value (cf. above).
When running the image interactively, you can use GNU readline
history and editing capabilities.