Reparar um Serviço de Aplicação Conteinerizada

DockerBeginner
Pratique Agora

Introdução

Um serviço de aplicação conteinerizada possui várias camadas: a unidade do systemd, o comando wrapper, a referência da imagem, o runtime do contêiner e a saída da aplicação. Uma tag de imagem incorreta pode fazer com que o serviço falhe antes mesmo de a aplicação iniciar.

Neste laboratório, o rhce-container-app.service utiliza o Podman para executar um contêiner UBI 10 minimal. A imagem correta já foi baixada, mas o arquivo de ambiente do serviço aponta para uma tag inexistente. Você irá diagnosticar a falha, corrigir a tag da imagem, reiniciar o serviço e verificar o contêiner em execução.

Confirmar a Falha do Serviço de Contêiner

Nesta etapa, você inspecionará a unidade do systemd que falhou antes de alterar a configuração do contêiner.

Entre no diretório do projeto e crie um espaço de trabalho.

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

Verifique o estado do serviço.

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

Salve as propriedades selecionadas do serviço.

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

Leia os logs recentes do serviço.

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

O serviço falha antes que a aplicação crie seu arquivo de prontidão (ready file).

Inspecionar Imagens e o Arquivo de Ambiente

Nesta etapa, você comparará a imagem disponível localmente com a tag de imagem utilizada pelo serviço.

Liste as imagens locais.

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

Leia o arquivo de ambiente do serviço.

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

Exiba o comando wrapper.

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

A tag da imagem local é latest, mas o serviço aponta para missing.

Reparar a Tag da Imagem

Nesta etapa, você atualizará apenas o arquivo de ambiente do serviço para que ele utilize a tag da imagem baixada.

Substitua a tag incorreta.

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

Salve o ambiente reparado.

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

O serviço agora aponta para a imagem que existe localmente.

Reiniciar o Serviço de Contêiner

Nesta etapa, você limpará o estado de falha e reiniciará o contêiner gerenciado pelo systemd.

Redefina o estado de falha.

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

Reinicie o serviço.

sudo systemctl restart rhce-container-app.service

Salve o estado ativo.

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

O serviço agora deve permanecer ativo, pois o Podman pode utilizar a imagem corrigida.

Verificar o Contêiner em Execução

Nesta etapa, você verificará o Podman e o arquivo de prontidão da aplicação.

Liste o contêiner em execução.

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

Leia o arquivo de prontidão criado pelo contêiner.

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

O serviço conteinerizado está em execução e produziu a saída esperada.

Resumo

Você diagnosticou uma falha em um serviço Podman gerenciado pelo systemd, comparou a imagem disponível com a tag de imagem configurada, reparou o arquivo de ambiente, reiniciou o serviço e verificou o contêiner em execução e o arquivo de prontidão da aplicação.