Согласно документации изображения том базы данных должен быть /data/db
. Это также видно в томе Dockerfile .
Поскольку том определен в Dockerfile, если вы не создаете том в этом каталоге, даже если вы создали том в родительском файле как /data
, docker создаст анонимный том на /data/db
, который будет отображаться как длинное имя тома guid в docker volume ls
. В зависимости от того, как работает контейнер, они могут остаться позади.
Поэтому исправление состоит в том, чтобы отрегулировать монтирование тома по этому пути:
version: "3"
services:
pokerstats:
image: pokerstats
container_name: pokerstats
ports:
- 8080:8080
depends_on:
- db
db:
image: mongo
container_name: mongo
volumes:
- ./database:/data/db
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: pokerstats
Обратите внимание, что если вам не нужен прямой доступ к эти данные на хосте, я бы рекомендовал использовать именованный том вместо. Он включает шаги инициализации, которые помогают при проблемах с разрешениями, которые могут возникнуть у томов хоста, особенно при запуске непосредственно на хосте Linux.
Для использования именованного тома это будет выглядеть следующим образом:
version: "3"
services:
pokerstats:
image: pokerstats
container_name: pokerstats
ports:
- 8080:8080
depends_on:
- db
db:
image: mongo
container_name: mongo
volumes:
- dbdata:/data/db
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: pokerstats
volumes:
dbdata: