Обновление Docker-контейнера
Обновление MikoPBX, запущенной в Docker или Docker Compose
Рекомендуется производить обновления последовательно, «не перепрыгивая» через релизы и версии.
Docker-контейнер MikoPBX не обновляется файлами .img или .iso. Для перехода на новую версию нужно скачать новый Docker image и пересоздать контейнер, сохранив каталоги /cf, /storage, сетевые параметры и переменные окружения.
Подготовка
Создайте резервную копию настроек MikoPBX. Если модуль резервного копирования недоступен в непривилегированном контейнере, подготовьте резервное копирование каталогов или volumes на стороне Docker-хоста.
Запишите имя и версию текущего image:
sudo docker inspect mikopbx --format '{{.Config.Image}}'Сохраните текущую конфигурацию контейнера:
sudo docker inspect mikopbx > mikopbx-container-before-update.jsonПроверьте подключения
/cfи/storage:
sudo docker inspect mikopbx --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'Запишите используемые порты,
network_mode, hostname и переменные окружения. Если контейнер запускается через Compose, сохраните актуальныйdocker-compose.ymlи файл.env.Завершите активные вызовы и запланируйте техническое окно.
Обновление контейнера, запущенного командой docker run
Загрузка нового image
Для последней стабильной версии выполните:
Если используется фиксированный тег, укажите тот же registry и тег нужной версии вместо latest.
Остановка и замена контейнера
Остановите контейнер:
Создайте консистентную резервную копию
/cf, пока контейнер остановлен. Для bind mount из примера выше можно выполнить:
Помимо /cf, новую версию стоит подстраховать бэкапом базы CDR — она лежит в /storage и при первом старте тоже может быть мигрирована. В /cf находится только mikopbx.db (настройки), а история звонков — это отдельная cdr.db (и recording_storage.db) в /storage/usbdisk1/mikopbx/astlogs/asterisk/.
Бэкап делается на остановленном контейнере (как и для /cf), чтобы база была в согласованном состоянии:
При откате восстанавливайте оба архива: сначала /cf, затем CDR - иначе история звонков и привязка записей к звонкам могут рассинхронизироваться с настройками.
Переименуйте старый контейнер вместо немедленного удаления:
Запустите новый контейнер с теми же параметрами. Пример для установки с host network и bind mounts:
Пример нельзя копировать без проверки. Повторите все параметры именно вашей прежней установки: тип сети, volumes, порты, hostname, capabilities и переменные окружения.
Следите за запуском:
Для выхода из просмотра логов нажмите Ctrl+C — контейнер продолжит работу.
Обновление с Docker Compose
Перейдите в каталог с
docker-compose.yml.Если идентификаторы пользователя передаются через окружение, задайте их так же, как при первом запуске:
Загрузите новый image:
Пересоздайте контейнер:
Проверьте состояние и логи:
Docker Compose пересоздаст контейнер, но сохранит bind mounts и именованные volumes, указанные в docker-compose.yml.
Проверка после обновления
Убедитесь, что контейнер работает:
Откройте web-интерфейс и проверьте версию MikoPBX.
Проверьте наличие настроек и записей разговоров.
Убедитесь, что телефоны и SIP-провайдеры зарегистрировались.
Выполните входящий и исходящий тестовые звонки.
Проверьте публикацию web-, SIP- и RTP-портов, если используется bridge network.
Откат
Если новый контейнер не запускается:
Сохраните его логи:
Остановите и переименуйте новый контейнер:
Восстановите резервную копию
/cf, созданную до обновления. Способ восстановления зависит от того, используется bind mount, именованный volume или snapshot системы хранения.Верните прежнее имя старому контейнеру и запустите его:
После первого запуска новая версия могла обновить базу данных в /cf. Поэтому надёжный откат должен опираться не только на старый container image, но и на резервную копию /cf, созданную до обновления.
Для отката установки Docker Compose укажите в docker-compose.yml предыдущий тег image, восстановите предыдущее состояние /cf и снова выполните:
После успешной проверки новый контейнер можно удалить старый:
Last updated
Was this helpful?

