Восстановление контейнеризированного сервиса приложения

DockerBeginner
Практиковаться сейчас

Введение

Контейнеризированный сервис приложения состоит из нескольких уровней: unit-файл systemd, команда-обертка, ссылка на образ, среда выполнения контейнера и вывод приложения. Неверный тег образа может привести к сбою службы еще до запуска самого приложения.

В этой лабораторной работе сервис rhce-container-app.service использует Podman для запуска минимального контейнера UBI 10. Необходимый образ уже загружен, но файл окружения службы указывает на несуществующий тег. Вам предстоит диагностировать причину сбоя, исправить тег образа, перезапустить службу и проверить работу контейнера.

Подтверждение сбоя контейнерного сервиса

На этом этапе вы изучите состояние неисправного unit-файла systemd перед внесением изменений в конфигурацию контейнера.

Перейдите в каталог проекта и создайте рабочую область.

cd /home/labex/project
mkdir -p container-service

Проверьте состояние службы.

systemctl is-failed rhce-container-app.service || true

Сохраните выбранные свойства службы.

systemctl show rhce-container-app.service -p ActiveState -p Result -p ExecMainStatus | tee container-service/service-state.txt

Прочитайте последние записи в логах службы.

sudo journalctl -u rhce-container-app.service -n 20 --no-pager

Служба завершается с ошибкой до того, как приложение успевает создать файл готовности.

Проверка образов и файла окружения

На этом этапе вы сравните образы, доступные локально, с тегом образа, используемым службой.

Выведите список локальных образов.

sudo podman images | tee container-service/images.txt

Прочитайте файл окружения службы.

sudo cat /etc/rhce-container/app.env | tee container-service/env-before.txt

Посмотрите содержимое команды-обертки.

sudo sed -n '1,16p' /usr/local/bin/rhce-container-run

Локальный тег образа — latest, но служба ссылается на missing.

Исправление тега образа

На этом этапе вы обновите файл окружения службы, чтобы он использовал корректный тег загруженного образа.

Замените неверный тег.

sudo sed -i 's/:missing/:latest/' /etc/rhce-container/app.env

Сохраните исправленную конфигурацию окружения.

sudo cat /etc/rhce-container/app.env | tee container-service/env-after.txt

Теперь служба указывает на образ, который присутствует в локальном хранилище.

Перезапуск контейнерного сервиса

На этом этапе вы сбросите состояние ошибки и перезапустите контейнер под управлением systemd.

Сбросьте состояние сбоя.

sudo systemctl reset-failed rhce-container-app.service

Перезапустите службу.

sudo systemctl restart rhce-container-app.service

Сохраните текущее состояние службы.

systemctl is-active rhce-container-app.service | tee container-service/service-final.txt

Теперь служба должна оставаться активной, так как Podman может использовать исправленный образ.

Проверка работающего контейнера

На этом этапе вы проверите работу Podman и наличие файла готовности приложения.

Выведите список запущенных контейнеров.

sudo podman ps --filter name=rhce-container-app --format "{{.Names}} {{.Status}}" | tee container-service/container-state.txt

Прочитайте файл готовности, созданный контейнером.

cat /srv/rhce-container/ready.txt | tee container-service/ready.txt

Контейнеризированный сервис запущен и успешно выполнил свою задачу.

Резюме

Вы провели диагностику неисправного сервиса Podman под управлением systemd, сравнили доступный образ с настроенным тегом, исправили файл окружения, перезапустили службу и подтвердили корректную работу контейнера и приложения.