invalid mount config for type "bind": bind source path does not exist — the folder you asked Docker to mount is not where the engine looks. On Docker Desktop for Windows that almost always means a Linux-style path, copied from a Linux machine or from inside WSL, given to --mount. Use the Windows folder that holds your files, as an absolute path.

In PowerShell that is ${PWD}\data. In Git Bash, switch path conversion off with MSYS_NO_PATHCONV=1 and use $(pwd -W)/data.

The error

PS> docker run --rm --name fix5-bind --mount type=bind,source=/home/maria/clinic/data,target=/data alpine ls /data
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /home/maria/clinic/data

Run 'docker run --help' for more information

The exit code is 125: the container was never created.

Why it happens

--mount type=bind checks that the source exists and refuses if it does not. On Docker Desktop a drive path such as C:\..., C:/... or /c/... is translated to your Windows disk, but any other path starting with / is looked up inside Docker Desktop's own Linux environment, where the engine runs. That is neither your disk nor your WSL distribution: a home folder that existed in Ubuntu-24.04 was reported as not existing when passed from Windows.

The opposite mistake is quieter. A typo in a Windows path did not produce this error at all: with source=${PWD}\dta instead of data, Docker Desktop created an empty dta folder, mounted it, and ls printed nothing. -v did the same, and so did Compose's long syntax, which also created a missing Linux path inside Docker Desktop. If a mount is unexpectedly empty, look for a new empty folder next to the one you meant.

Git Bash adds its own twist. Without MSYS_NO_PATHCONV=1 it rewrote /home/maria/clinic/data into a path under C:\Program Files\Git, and the daemon answered mkdir C:\Program Files\Git\home: Access is denied.

The fix

Point the source at the Windows folder, absolute, from PowerShell:

PS> docker run --rm --name fix5-bind --mount type=bind,source=${PWD}\data,target=/data alpine ls /data
patients.csv
PS> docker run --rm --name fix5-bind -v "${PWD}\data:/data" alpine cat /data/patients.csv
id,name
1,Maria Garcia
2,David Chen

The same from Git Bash:

$ export MSYS_NO_PATHCONV=1
$ docker run --rm --name fix5-bind --mount type=bind,source="$(pwd -W)/data",target=/data alpine ls /data
patients.csv

$(pwd -W) gives the C:/Users/... form; plain $(pwd), the /c/Users/... form, also worked once conversion was off. If the files really live inside a WSL distribution, run docker from that distribution with Docker Desktop's WSL integration on, rather than passing its paths from Windows. Neither --mount nor -v protects you from a typo in a Windows path here, so check the folder name whenever a mount comes up empty.

How it was reproduced

On Windows 11 with Docker Desktop 4.95.0 (engine 29.8.2, Compose v5.6.0), from Windows PowerShell 5.1 and Git Bash 5.2.26, with the cached alpine:latest image. The host folder data held one CSV of fictional names; /home/maria/clinic/data is a made-up Linux path. The folders that the typo and Compose tests created were the evidence for the quieter failure; the one Compose made inside Docker Desktop was removed afterwards. fix5-bind is the test container's name.

Frequently asked

Why does Docker say bind source path does not exist on Windows?
The source is a Linux-style path that does not exist inside Docker Desktop's Linux environment, often one copied from a Linux machine or from WSL. Give the Windows folder as an absolute path instead.
Why is my Docker bind mount empty on Windows?
Check the spelling of the host folder. In the test, a mistyped Windows path made Docker Desktop create a new empty folder and mount it, with both -v and --mount, so no error appeared.
How do I bind mount the current folder in PowerShell and Git Bash?
In PowerShell use ${PWD}\data as the source. In Git Bash set MSYS_NO_PATHCONV=1 and use $(pwd -W)/data, which gives Docker a C:/ path it understands.

More decoded errors in the Fixes category. The three path spellings Docker Desktop accepts, and what Git Bash does to them, are in Files In and Out: Bind Mounts and Volumes on Windows.