Именованные тома не должны терять данные, как объяснено в документации :
Тома являются предпочтительным механизмом для сохранения данных, генерируемых и используемых контейнерами Docker.
Что вам действительно нужно, так это убедиться, что вы сохраняете базу данных в правильном каталоге, который будет использовать указанный том. Я предлагаю создать конкретный каталог внутри вашего приложения фляги, чтобы сохранить файл sqlite3, а затем смонтировать этот каталог на указанный вами том. Например, ваш путь к файлу sqlite3: /home/myflaskapp/db
, тогда монтирование будет следующим: в противном случае вы потеряете данные, потому что вы не смонтировали правильный путь, который хотите сохранить:
docker run -p 5000:5000 -v mydb:/home/myflaskapp/db my-app
ОПИСАНИЕ
uniq [ОПЦИЯ] ... [ВХОД [ВЫХОД]]
ОПИСАНИЕ
Отменить все, кроме одной, последовательные идентичные строки из INPUT (или стандартного ввода), записи в OUTPUT (или стандартный вывод).
Или, если вы также хотите удалить несмежные дубликаты, этот фрагмент perl сделает это:
while(<>) {
print $_ if (!$seen{$_});
$seen{$_}=1;
}
В дополнение к ответам uniq
, которые прекрасно работают, если вы не возражаете против сортировки вашего файла
. Если вам нужно удалить несмежные строки (или если вы хотите удалить дубликаты, не переставляя свой файл), следующий Perl-однострочник должен это сделать (украдено из здесь ):
cat textfile | perl -ne '$H{$_}++ or print'
Если вы заинтересованы в удалении смежных дубликаты строк, используйте uniq
.
Если вы хотите удалить все дубликаты строк, а не только соседние, то это сложнее.
Вот то, что я придумал, пока я ждал ответа здесь (хотя пришел первый (и принятый) ответ примерно через 2 минуты). Я использовал эту замену в VIM
:
%s/^\(.*\)\n\1$/\1/
Это означает: ищите строки, где после новой строки у нас то же самое, что и раньше, и заменяйте их только тем, что мы захватили в первой строке.
uniq
определенно проще, хотя.