Portainer¶
O Portainer fornece uma interface web para administrar containers, imagens, volumes, redes e stacks Docker.
Nesta VPS, ele é uma ferramenta administrativa não essencial e pode permanecer desligado durante o modo econômico.
Informações desta VPS¶
| Item | Valor |
|---|---|
| Stack | /opt/stacks/infra/compose.yml |
| Serviço Compose | portainer |
| Container | infra-portainer-1 |
| Imagem configurada | portainer/portainer-ce:latest |
| Versão registrada | 2.33.5 |
| Domínio | https://portainer.cloud.hometecseg.com |
| Porta interna | 9000 |
| Rede Docker | proxy |
| Volume | infra_portainer-data |
| Diretório no container | /data |
| Docker Socket | /var/run/docker.sock |
| Operação contínua | Não obrigatória |
Modo econômico
O Portainer pode aparecer como parado porque é desligado propositalmente pelo script de modo econômico da VPS. Isso não significa necessariamente falha.
Estado atual¶
Ver o estado do Portainer¶
Ver somente containers em execução¶
Ver containers ativos ou parados¶
Ver o estado detalhado¶
docker inspect infra-portainer-1 \
--format 'Status={{.State.Status}} ExitCode={{.State.ExitCode}} FinishedAt={{.State.FinishedAt}} OOMKilled={{.State.OOMKilled}}'
Iniciar e parar¶
Iniciar o Portainer¶
Caso o container ainda não exista:
Parar o Portainer¶
Reiniciar o Portainer¶
Recriar o container¶
Confirmar o estado após iniciar¶
Acesso¶
Endereço:
Testar o domínio¶
Verificar o DNS¶
Ver detalhes da conexão HTTPS¶
Serviço desligado
O domínio ficará indisponível enquanto o Portainer estiver parado pelo modo econômico.
Logs¶
Ver os últimos 100 registros¶
Acompanhar os logs em tempo real¶
Procurar erros¶
Procurar avisos¶
Ver os registros da última inicialização¶
docker logs infra-portainer-1 \
--since "$(docker inspect infra-portainer-1 --format '{{.State.StartedAt}}')"
Versão¶
Ver a versão registrada nos logs¶
Mostrar somente o número da versão¶
docker logs infra-portainer-1 2>&1 \
| grep "starting Portainer" \
| tail -1 \
| grep -oE 'version=[^ ]+'
Ver a imagem configurada no Compose¶
Ver a imagem associada ao container¶
Ver o identificador da imagem local¶
Versões disponíveis¶
A instalação atual utiliza:
Para servidores de produção, é preferível usar a linha LTS:
A sigla LTS significa Long-Term Support, ou suporte de longo prazo. Essa linha prioriza estabilidade e manutenção em vez de receber imediatamente todas as novidades.
Estado registrado ao criar esta documentação:
| Canal | Versão |
|---|---|
| Versão instalada registrada | 2.33.5 |
| LTS disponível | 2.39.4 |
| STS disponível | 2.43.0 |
O canal STS recebe funcionalidades mais recentes. Para esta VPS, a linha LTS é a opção mais prudente.
Valores temporais
As versões disponíveis mudam com o tempo. Consulte sempre a página oficial de releases antes de atualizar.
Verificar atualização disponível¶
Baixar os metadados da imagem LTS¶
Esse comando baixa a imagem, mas não recria o container.
Ver o identificador da imagem LTS baixada¶
Ver o identificador da imagem utilizada pelo container¶
Se os identificadores forem diferentes, o container ainda utiliza uma imagem anterior.
Comparar automaticamente¶
CONTAINER_IMAGE="$(docker inspect infra-portainer-1 --format '{{.Image}}')" &&
LATEST_IMAGE="$(docker image inspect portainer/portainer-ce:lts --format '{{.Id}}')" &&
if [ "$CONTAINER_IMAGE" = "$LATEST_IMAGE" ]; then
echo "Portainer já utiliza a imagem LTS baixada."
else
echo "Existe uma imagem LTS diferente da usada pelo container."
fi
Imagem diferente não garante versão maior
A comparação detecta imagens diferentes. Ela não analisa semanticamente os números de versão. Imagens podem mudar por reconstruções de segurança sem alterar o número principal.
Preparação para atualização¶
Criar diretório de backup¶
Criar backup do Compose¶
Criar backup do arquivo de ambiente¶
Verificar o volume¶
Ver o espaço utilizado¶
Backup dos dados¶
Criar backup compactado do volume¶
docker run --rm \
-v infra_portainer-data:/source:ro \
-v /opt/backups/portainer:/backup \
alpine \
tar -czf "/backup/portainer-data-$(date +%Y%m%d-%H%M%S).tar.gz" \
-C /source .
Listar os backups¶
Verificar o conteúdo do backup¶
Atualizar para LTS¶
Criar backup antes da atualização¶
docker run --rm \
-v infra_portainer-data:/source:ro \
-v /opt/backups/portainer:/backup \
alpine \
tar -czf "/backup/portainer-data-pre-update-$(date +%Y%m%d-%H%M%S).tar.gz" \
-C /source .
Alterar a imagem no Compose¶
No arquivo:
Substituir:
por:
Validar o Compose¶
Baixar a imagem LTS¶
Recriar somente o Portainer¶
Verificar o estado¶
Verificar os logs¶
Confirmar a versão¶
Testar o domínio¶
Atualização pelo script¶
Existe um script dedicado:
Ele será analisado e documentado posteriormente na página de scripts.
Antes de utilizá-lo:
Para verificar permissões:
Não executar sem revisão
O script deve ser revisado antes de ser chamado pela documentação. Ainda precisamos confirmar se ele cria backup, usa latest ou lts, valida o container e oferece rollback.
Volume persistente¶
Ver as montagens¶
docker inspect infra-portainer-1 \
--format '{{range .Mounts}}{{println .Type "|" .Name "|" .Source "|" .Destination}}{{end}}'
Inspecionar o volume¶
Ver os arquivos persistentes¶
Ver o banco interno¶
Não editar diretamente
Não edite manualmente o arquivo portainer.db. Ele é controlado pelo Portainer e utiliza o formato BoltDB.
Docker Socket¶
O Portainer possui acesso a:
Essa montagem permite administrar o Docker da VPS.
Confirmar a montagem¶
docker inspect infra-portainer-1 \
--format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
Acesso privilegiado
Um container com acesso ao Docker Socket pode controlar containers, volumes, redes e, em muitos cenários, o próprio host. O painel deve possuir senha forte e não deve ficar exposto sem proteção.
Traefik¶
Ver as labels¶
Verificar a rede proxy¶
Confirmar as redes do container¶
Ver logs do Traefik¶
Troubleshooting¶
Portainer aparece como parado¶
Verificar:
Se ele tiver sido parado pelo modo econômico, iniciar com:
Caso o container não exista:
Portainer encerra após iniciar¶
Verificar:
docker inspect infra-portainer-1 \
--format 'ExitCode={{.State.ExitCode}} Error={{printf "%q" .State.Error}} OOMKilled={{.State.OOMKilled}}'
Erro 404¶
Verificar as labels:
Verificar o domínio:
Verificar o Traefik:
Erro 502 ou Gateway Timeout¶
Verificar se o Portainer está ativo:
Verificar a rede:
Verificar a porta configurada:
A porta esperada nesta VPS é:
Ambiente Docker aparece desconectado¶
Verificar o Docker Socket:
Verificar a montagem:
docker inspect infra-portainer-1 \
--format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
Verificar os logs:
Senha administrativa esquecida¶
Não apague o volume.
Primeiro, crie um backup:
docker run --rm \
-v infra_portainer-data:/source:ro \
-v /opt/backups/portainer:/backup \
alpine \
tar -czf "/backup/portainer-data-before-password-reset-$(date +%Y%m%d-%H%M%S).tar.gz" \
-C /source .
O procedimento de redefinição de senha deve ser conferido na documentação oficial correspondente à versão instalada.
Boas práticas¶
- Manter o Portainer desligado quando não for necessário.
- Preferir a imagem
portainer/portainer-ce:lts. - Fazer backup do volume antes das atualizações.
- Não remover o volume
infra_portainer-data. - Não publicar diretamente as portas
9000ou9443. - Utilizar apenas o Traefik para acesso externo.
- Usar senha administrativa forte.
- Verificar logs após toda atualização.
- Revisar o script de atualização antes de executá-lo.
- Não usar
docker compose down -v.