Skip to main content

Docker

You can install and run Coder using the official Docker images published on GitHub Container Registry.

Requirements

Important

This guide is for Linux hosts only. The getent and --group-add Docker socket patterns used below are Linux-specific and do not translate cleanly to macOS Docker runtimes. For macOS, install Coder using the standalone binary instead.

Coder publishes a docker compose example which includes a PostgreSQL container and volume.

  1. Make sure you have Docker Compose installed.

  2. Download the docker-compose.yaml file.

  3. Update group_add: in docker-compose.yaml with the gid of docker group. You can get the docker group gid by running the below command:

    getent group docker | cut -d: -f3
  4. Start Coder with docker compose up

  5. Visit the web UI via the configured url.

  6. Follow the on-screen instructions log in and create your first template and workspace

Coder configuration is defined via environment variables. Learn more about Coder's configuration options.

Install the preview release

Tip

We do not recommend using preview releases in production environments.

You can install and test a preview release of Coder by using the coder-preview:latest image tag. This image is automatically updated with the latest changes from the main branch.

Replace ghcr.io/coder/coder:latest in the docker run command in the steps above with ghcr.io/coder/coder-preview:latest.

Troubleshooting

Cannot connect to the Docker daemon

If you see an error like:

Error: Error pinging Docker server: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Docker is not installed or not running on the host. Install Docker and start the daemon before creating a workspace from a Docker-based template. Refer to the Troubleshooting section of the get started guide for platform-specific steps.

If Docker is installed and running but Coder still cannot connect, the daemon may expose its socket at a path other than /var/run/docker.sock. This can happen on any operating system when Docker runs through a tool that uses a per-user socket, such as rootless Docker on Linux, or Colima, Podman, or Rancher Desktop on macOS. Point Coder at the right socket with DOCKER_HOST.

Find the socket path first. For example, run colima status for Colima, or docker context inspect to read the endpoint of the active Docker context. Default socket paths vary by tool, so consult your tool's documentation and treat the following as examples only:

# rootless Docker (Linux) export DOCKER_HOST="unix://${XDG_RUNTIME_DIR}/docker.sock" # Colima (macOS) export DOCKER_HOST="unix://${HOME}/.colima/default/docker.sock"

To persist the setting, add the export line to your shell's startup file, such as ~/.bashrc, ~/.zshrc, or ~/.config/fish/config.fish. Then restart the Coder server.

Docker-based workspace is stuck in "Connecting..."

Ensure you have an externally-reachable CODER_ACCESS_URL set. See troubleshooting templates for more steps.

Permission denied while trying to connect to the Docker daemon socket

See Docker's official documentation to Manage Docker as a non-root user

I cannot add Docker templates

Coder runs as a non-root user, we use --group-add to ensure Coder has permissions to manage Docker via docker.sock. If the host systems /var/run/docker.sock is not group writable or does not belong to the docker group, the above may not work as-is.

I cannot add cloud-based templates

In order to use cloud-based templates (e.g. Kubernetes, AWS), you must have an external URL that users and workspaces will use to connect to Coder. For proof-of-concept deployments, you can use Coder's tunnel. For production deployments, we recommend setting an access URL

Next steps