Docker: Do not use Docker bind mounts

This documentation is part of the Volumes guide. You can view the complete guide here: How to persist your containers' data with Docker volumes.

Welcome to the Stackhero documentation

Stackhero offers 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 command. No additional configuration required: just launch your containers.
  • Choose your own domain name, automatically secured with HTTPS (for example: https://api.your-company.com, https://www.your-company.com, or https://backoffice.your-company.com).
  • Take advantage of high performance and enhanced security on private, dedicated infrastructure.
  • Apply updates with a single click for simple, effortless maintenance.

Your containers can be running in production in about five minutes. Stackhero manages the infrastructure, updates, and security for you, so you can focus on developing your applications. Learn more about Docker CaaS cloud hosting.

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. Avoid these configurations or you will lose 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