Если остановить Docker-контейнер, будут ли данные внутри него потеряны?

«Если остановить Docker-контейнер, будут ли данные внутри него потеряны?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, при простой остановке (docker stop) данные внутри контейнера сохраняются в его слоях файловой системы. Контейнер можно перезапустить (docker start), и данные будут на месте.

Потеря данных происходит в двух случаях:

  1. Удаление контейнера (docker rm). Данные, созданные в его слоях, теряются безвозвратно.
  2. Использование контейнера без томов (volumes) для хранения состояния. Это антипаттерн для stateful-данных.

Правильный подход — использование томов (volumes) или bind mounts:

# Создание именованного тома и его подключение
docker volume create app_data
docker run -d --name myapp -v app_data:/var/lib/app myapp:latest

# Остановка и удаление контейнера не затронут данные в томе 'app_data'
docker stop myapp
docker rm myapp

# Новый контейнер получит доступ к тем же данным
docker run -d --name myapp2 -v app_data:/var/lib/app myapp:latest

Для критичных данных всегда используйте тома или монтирование хостовых директорий.