Skip to content
Latchkey

Docker Compose Volume Mount "bind source path does not exist" in CI

A Compose bind mount pointed at a host path that does not exist on the runner. Compose (unlike Docker’s implicit create) refuses to mount a missing bind source, so the container fails to start.

What this error means

A docker compose up fails to start a service with error while creating mount source path / bind source path does not exist: <path>. The compose file is valid; the host directory it binds is simply not there in CI.

docker compose output
Error response from daemon: error while creating mount source path
'/home/runner/work/app/data': bind source path does not exist: /home/runner/work/app/data

Common causes

The relative host path is absent on the runner

A ./data:/var/lib/data bind expects ./data to exist relative to the compose file. In a fresh checkout that directory may never have been created.

Wrong volume short-syntax interpreted as a bind

A volumes: entry meant to be a named volume but written as a path (or vice versa) makes Compose treat a missing host path as a bind source.

Path relative to the wrong working directory

Bind sources resolve relative to the compose file’s location; running from elsewhere makes a correct-looking relative path resolve to nothing.

How to fix it

Create the bind source before composing up

Make the host directory exist in the job before starting the services.

Terminal
mkdir -p ./data
docker compose up -d

Use a named volume when no host path is needed

If the data does not need to live on the host, a named volume avoids the bind-source requirement entirely.

docker-compose.yml
services:
  db:
    volumes:
      - dbdata:/var/lib/postgresql/data   # named volume, not a host bind
volumes:
  dbdata:

How to prevent it

  • Create bind-mount host directories in the job before compose up.
  • Prefer named volumes when the data need not be a host path.
  • Keep bind paths relative to the compose file and run from that directory.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →