Как обновить контейнер до новой версии образа
Контейнер не обновляется сам: он навсегда привязан к тому образу, из которого создан. Обновление — это новый образ и новый контейнер с теми же настройками. Данные в томах и подключённых папках при этом сохраняются.
Как обновить
Порядок зависит от того, как запущен контейнер: через Docker Compose или командой docker run.
Docker Composepull и up -d
В папке проекта:
docker compose pull
docker compose up -d
docker image prunepull скачивает свежие версии образов, up -d пересоздаёт только те контейнеры, чей образ изменился, image prune удаляет старые образы, которые больше не нужны. Обновить один сервис: docker compose pull web, затем docker compose up -d web.
Запущен через docker runpull и пересоздание
docker pull nginx:alpine
docker stop web
docker rm web
docker run -d --name web -p 8080:80 -v "$HOME/site":/usr/share/nginx/html:ro --restart unless-stopped nginx:alpine
docker image pruneГлавное — создать контейнер с теми же ключами, что и раньше: порты, переменные, тома, политика перезапуска. Если команда запуска не сохранилась, посмотрите настройки старого контейнера до его удаления:
docker inspect webНужное — в разделах Config.Env (переменные), HostConfig.PortBindings (порты), Mounts (тома и папки), HostConfig.RestartPolicy. Чтобы в следующий раз не восстанавливать по кусочкам, перенесите сервис в compose.yaml (урок Docker Compose).
Если данные лежат в слое контейнера, а не в томе, docker rm удалит их. Перед первым обновлением проверьте в docker inspect web раздел Mounts: там должны быть все папки с данными. Если чего-то нет — сначала скопируйте данные (docker cp) и подключите том.
Новая версия — это новый тег
docker pull обновляет образ в пределах тега: nginx:alpine — до свежего nginx:alpine, postgres:18 — до последнего выпуска 18. Чтобы перейти на другую основную версию, поменяйте тег в команде запуска или в compose.yaml (postgres:17 → postgres:18).
Базы данных при смене основной версии часто не открывают файлы старой версии — контейнер не запустится или потребует обновления данных. Перед такой сменой сделайте дамп базы и прочитайте инструкцию к образу на Docker Hub.
Откат
Если новая версия работает плохо, верните прежнюю, указав её точный тег, например nginx:1.30.4 вместо nginx:1.30, и пересоздайте контейнер. Откат возможен, только если данные совместимы со старой версией — у баз данных после обновления это не всегда так. Поэтому на серверах удобно указывать точные теги и повышать их осознанно.
Как проверить, что обновилось
docker ps
docker image ls nginxСтолбец CREATED у контейнера покажет, что он новый. Увидеть, на каком образе работает контейнер: docker inspect --format '{{.Image}}' web — идентификатор должен совпасть с идентификатором свежего образа.
Есть программы, которые обновляют контейнеры автоматически по расписанию. Они удобны для домашних серверов, но на рабочих серверах обновление лучше запускать самому — чтобы видеть, что изменилось, и иметь возможность откатиться.