2.2 KiB
| display_name | description | icon | verified | tags | ||
|---|---|---|---|---|---|---|
| Docker Containers | Provision Docker containers as Coder workspaces | ../../../../.icons/docker.svg | true |
|
Remote Development on Docker Containers
Provision Docker containers as Coder workspaces with this example template.
Prerequisites
Infrastructure
Running Coder inside Docker
If you installed Coder as a container within Docker, you will have to do the following things:
- Make the the Docker socket available to the container
- (recommended) Mount
/var/run/docker.sockvia--mount/volume - (advanced) Restrict the Docker socket via https://github.com/Tecnativa/docker-socket-proxy
- (recommended) Mount
- Set
--group-add/group_addto the GID of the Docker group on the host machine- You can get the GID by running
getent group dockeron the host machine
- You can get the GID by running
If you are using docker-compose, here is an example on how to do those things (don't forget to edit group_add!):
0bfe0d63ae/docker-compose.yaml (L16-L23)
Running Coder outside of Docker
If you installed Coder as a system package, the VM you run Coder on must have a running Docker socket and the coder user must be added to the Docker group:
# Add coder user to Docker group
sudo adduser coder docker
# Restart Coder server
sudo systemctl restart coder
# Test Docker
sudo -u coder docker ps
Architecture
This template provisions the following resources:
- Docker image (built by Docker socket and kept locally)
- Docker container pod (ephemeral)
- Docker volume (persistent on
/home/coder)
This means, when the workspace restarts, any tools or files outside of the home directory are not persisted. To pre-bake tools into the workspace (e.g. python3), modify the container image. Alternatively, individual developers can personalize their workspaces with dotfiles.
Note
This template is designed to be a starting point! Edit the Terraform to extend the template to support your use case.
Editing the image
Edit the Dockerfile and run coder templates push to update workspaces.