Docker: Volumes
How to persist your containers data with Docker volumes
Welcome to the Stackhero documentation
Stackhero provides a ready-to-use Docker cloud CaaS (Containers as a Service) platform, designed for fast and reliable container deployments:
- Deploy to production with a single
docker-compose up. There is no extra setup: just start your containers.- Pick your own domain name, secured automatically with HTTPS (for example: https://api.your-company.com, https://www.your-company.com, or https://backoffice.your-company.com).
- Benefit from strong performance and robust security on private, dedicated infrastructure.
- Apply updates with one click for simple, low-effort maintenance.
You can have your containers live in production in about five minutes. Stackhero manages the infrastructure, updates, and security for you, so you can focus on delivering your applications. Read more about Docker CaaS cloud hosting.
By design, Docker containers are ephemeral. This means that any data stored directly within them will be lost when the container is removed or replaced by another instance. To ensure data persistence, Docker volumes are the recommended approach.
Do not use Docker bind mounts
Do not use bind mounts on Stackhero. Always opt for Docker volumes to prevent data loss.
Bind mounts involve linking a directory from the Stackhero host VM to a container. However, if you rely on bind mounts, updating your Stackhero for Docker instance will result in the loss of all data stored this way.
Bind mounts are commonly specified in the docker run command with syntax like -v /myDirectory:/mnt (note the leading /). In Docker Compose files, they appear as volumes: /myDirectory:/mnt. Ban these configurations or your will loose your data.
Instead, use Docker volumes, which are managed by Docker and do not reference absolute paths.
To summarize:
Incorrect approach:
docker run -it -v /myDirectory:/mnt alpine
Correct approach:
docker volume create myVolume
docker run -it -v myVolume:/mnt alpine
When working with Docker Compose files:
Incorrect configuration:
services:
myService:
image: alpine
volumes:
- /myDirectory:/mnt
Correct configuration:
services:
myService:
image: alpine
volumes:
- myVolume:/mnt
volumes:
myVolume:
name: myVolume
Handy Docker volume commands
Here is a quick reference for managing Docker volumes:
-
To create a new volume named
myVolume, run:docker volume create myVolume -
To list all existing volumes:
docker volume ls -
To remove a specific volume named
myVolume:docker volume rm myVolumeNote: Removing a volume will permanently delete all data stored within it, and there is no way to retrieve it afterwards.