Контейнер изменился сам: что на самом деле обещает метка «latest»
Вы ничего не обновляли, а контейнер ведёт себя иначе. Это не сбой: latest, это не версия, а указатель. Важно не получить самое новое, а суметь вернуться назад.
AtlasPVE ·
Эта статья отвечает на
- docker latest почему плохо
- контейнер обновился сам
- docker закрепить версию
- как выбрать тег docker
- откатить обновление контейнера
Вы ничего не обновляли. Вы перезапустили контейнер, и теперь он ведёт себя иначе: настройка пропала, интерфейс изменился, дополнение не работает. Это не сбой. latest, это не версия, а указатель, и на что он указывает, решаете не вы.
Что метка обещает на самом деле
latest не означает «последний стабильный выпуск». Он означает «то, что издатель выложил последним». Кто-то кладёт туда стабильный выпуск, кто-то сборку разработки. По метке разницы не видно.
Отсюда следуют три вещи, и все три встречаются в повседневной жизни.
Один и тот же файл, разный результат. На двух машинах может лежать одинаковый файл настроек, а работать разные версии, потому что скачивали в разное время. Чаще всего именно отсюда берётся фраза «у меня работает».
Момент изменения выбираете не вы. Контейнер обновляется тогда, когда его пересоздают. В ту ночь, когда вы перезапустили его из-за переполненного диска, вы могли незаметно перескочить версию.
Когда сломается, вернуться не получится. Это самое тяжёлое. Если вы не знаете, откуда пришли, туда не вернуться. Остаётся только фраза «вчера работало».
Важна не новая версия, а возможность вернуться
Закрепить версию, это не «осторожничать». Закрепление создаёт точку, куда можно вернуться. В закреплённой установке обновление, это принятое вами решение, а любое принятое решение можно отменить.
Цена очевидна: теперь обновлять придётся вам самим. Ровно в этом и был смысл.
Метку можно передвинуть, отпечаток нельзя
Издатель может передвинуть метку на другое. То есть то, что вы вчера скачали как 1.2, теоретически может отличаться от того, что вы скачаете как 1.2 сегодня. Если вы действительно имеете в виду «именно это», закрепляйте отпечаток образа, а не метку. Он выглядит длинно и некрасиво, но это единственный знак, который нельзя передвинуть.
Для большинства установок достаточно закрепить номер версии. Отпечаток нужен там, где вы обязаны воспроизвести ровно то же самое спустя годы.
Честное возражение
«Если закреплю, пропущу исправления безопасности.» Верно, если закрепить и забыть. Закрепление само по себе не стратегия, это половина привычки; вторая половина, регулярно читать примечания к выпускам. Закрепить и забыть хуже, чем остаться на latest, потому что вы отстаёте и не знаете об этом.
Проверка простая: спросите себя, когда вы в последний раз обновляли этот контейнер. Если ответа нет, дело не в закреплении, а в вашем календаре.
Страховочная сетка со стороны Proxmox
Контейнер находится внутри виртуальной машины или контейнера. Это даёт вам то, чего мир контейнеров не даёт: сделать снимок перед обновлением. Если обновление пройдёт плохо, вы отматываете не контейнер, а машину под ним.
Это не заменяет закрепление, но покрывает и то, что вы не закрепили. Порядок, который стоит превратить в привычку: сначала снимок, потом обновление, потом проверка, что оно действительно работает.
Что делает Atlas
Когда вы вставляете файл настроек в Atlas, он читает его до запуска. Образы без закреплённой версии, то есть те, где написано latest или метки нет вовсе, отмечаются как предупреждение.
Это намеренно предупреждение, а не запрет. Закрепление, это предпочтение, и предпочтение ваше; задача продукта не решать, а делать решение видимым. По-настоящему опасное, например передача контейнеру управляющего доступа к серверу или подключение корневого каталога сервера, отмечается другим цветом и другим языком.
Одна деталь важна: это чтение происходит на стороне сервера. Обойти интерфейс и отправить файл напрямую, значит не убрать предупреждение. Предупреждение, живущее только на экране, это не предупреждение.
Источники
Собственная документация Proxmox. На английском, и последнее слово в этом вопросе за ней.