том докера: данные теряются при удалении или остановке контейнера, а затем его перезапуске

Я установил 2 контейнера:

  • Mongo: как база данных -> том смонтирован по указанному пути

docker run --hostname raw-data-mongo --name = raw-data-mongo
--network = our-network -p 27017: 27017 -v data / db / raw-data-db: / data / db -d монго

  • Nodejs: сохраните данные в mongodb

docker run -d -p 80: 3001 --name = raw-data-container --network = наша-сеть -v / data / db / raw-data-db: / data / db raw-data-api

Но каждый раз, когда я сохраняю данные (используя контейнер приложения узла, подключаюсь к контейнеру mongo), а затем удаляю контейнер узла и перезапускаю, я не могу получить сохраненные данные.

Как мне смонтировать том, который не зависит от узла и, если возможно, от какого-либо контейнера?

Я хотел бы удалить и перезапустить контейнеры и по-прежнему иметь возможность получать свои данные


person Alexis Brunet    schedule 11.03.2019    source источник
comment
Создавали ли вы каталог data/db/raw-data-db перед развертыванием контейнера?   -  person gypsyCoder    schedule 11.03.2019
comment
@gypsyCoder: нет   -  person Alexis Brunet    schedule 11.03.2019


Ответы (2)


Вы можете запустить команду use -v, чтобы указать объем, на котором ваше развертывание докера должно сохранять ваши данные. Вы должны иметь в виду две вещи: во-первых, докер, который вы запускаете, должен открывать -v и использовать его для хранения своих данных (mongodb делает это, и большинство проектов делает то же самое), а другой - путь к постоянному тому, переданный с помощью -v должен существовать, и процесс докера должен иметь права на запись.

Надеюсь это поможет !!

person vizsatiz    schedule 11.03.2019
comment
спасибо за ваш ответ и обзор. Мне до сих пор неясно одно: mongo-контейнеру нужен том для хранения данных: ОК, node-container достигает mongo-контейнера для сохранения данных, но, поскольку он сам не сохраняет данные, я не понимаю, почему когда я перезапускаю свой mongo-контейнер и добираюсь до mongo, чтобы получить все данные, я получаю пустой ответ - person Alexis Brunet; 11.03.2019
comment
Поскольку ваш том mongo является временным, он назначает новый, если вы не укажете -v. Используйте что-то вроде docker-compose, если вам нужен более структурированный набор контейнеров и томов. - person Shardj; 11.03.2019
comment
извините, я имел в виду: я не понимаю, почему, когда я перезапускаю свой узел-контейнер и достигаю mongo, чтобы получить все данные, я получаю пустой ответ - person Alexis Brunet; 11.03.2019
comment
Предоставляете ли вы тот же путь volume при перезапуске mongo-контейнера? Если вы перезапускаете не mongo-container, а только ваш node-container, убедитесь, что вы подключаетесь к правильному mongo. - person vizsatiz; 11.03.2019

Пожалуйста, попробуйте следующее

Шаг 1. Создайте каталог

$HOME/data/db/raw-data-db

Шаг 2: Затем назначьте громкость

docker run --hostname raw-data-mongo --name=raw-data-mongo
--network=our-network -p 27017:27017 -v $HOME/data/db/raw-data-db:/data/db -d mongo

Таким образом, ваши данные будут сохранены для mongodb в томе. Для node.js используйте другой объем.

person gypsyCoder    schedule 11.03.2019
comment
спасибо за помощь, к сожалению не сработало. Я все еще не могу получить данные, которые я сохранил после перезапуска контейнера узла. Я также пробовал с опцией: --volumes-from raw-data-mongo Я до сих пор не понимаю, почему перезапуск моего контейнера узла вызывает потерю данных в моем контейнере mongo ... - person Alexis Brunet; 11.03.2019