Docker это вообще не виртуалка даже не близко.
Docker - это инструмент для управления технологиями изоляции и управления ресурсами встроенными в ядро Linux.
Saboteur, это контейнеры строго под Windows, там изоляция процессов обеспечена с помощью Hyper-V, на Linux они не заработают совсем - выполнение завершиться ошибкой вида "docker: no matching manifest for linux/amd64 in the manifest list entries"
shurshur, есть контейнеры на Windows Core (используют средства изоляции Windows ядра и работают только на Windows) и набор утилит для управления ими который называется... Хм... Тоже Docker.
Файл с базой размести в /home/user/database в контейнере база будет доступна в /database
Разумеется это всё только пример, размещать можешь, где удобно.
AUser0, если есть слеш, то от оригинального URI отрезается часть указанная в location - это позволяет отказаться от rewrite. Если слеша нет, то передаётся как есть.
host.docker.internal - это фишка Docker Desktop она не работает в реальных условиях. Да действительно host.docker.internal отрезолвиться в IP шлюза в контейнере (в тот IP который назначен интефейсу в хостовой системе), но что толку если это работает только в виртуалке Docker Desktop?
У каждого контейнера свой изолированный loopback интерфейс и он никак не связан с loopback-ом на хостовой машине. Да он выглядит точно также. Да ему назначен IP из подсети 127.0.0.0/8, но он изолирован от хостовой машины и доступен только для процесса в контейнере.
Если надо обратиться к сервису который запущен на хостовой машине есть только два способа - снять изоляцию с сети или заставить сервис слушать на всех интерфейсах и обращаться к нем по IP шлюза контейнера.
Нет, вообще не виртуальная машина. Контейнер это изолированный процесс (возможно ограниченный по ресурсам) и только.