Como remover imagens antigas e não utilizadas do Docker


762

Ao executar o Docker por um longo período, há muitas imagens no sistema. Como posso remover todas as imagens não utilizadas do Docker de uma só vez para liberar o armazenamento?

Além disso, também quero remover imagens obtidas meses atrás, com as correções corretas TAG .

Portanto, não estou pedindo para remover apenas imagens não marcadas. Estou procurando uma maneira de remover imagens gerais não utilizadas, que incluem imagens sem marcação e outras, como as que foram obtidas meses atrás com a correta TAG.

Respostas:


1402

Atualização em setembro de 2016: o Docker 1.13: PR 26108 e o commit 86de7c0 apresentam alguns novos comandos para facilitar a visualização de quanto espaço os dados do daemon do estivador estão ocupando no disco e permitindo limpar facilmente o excesso "desnecessário".

docker system pruneexcluirá TODOS os dados pendentes (ou seja, em ordem: contêineres parados, volumes sem contêineres e imagens sem contêineres). Mesmo dados não utilizados, com -aopção.

Você também tem:

Para imagens não utilizadas , use docker image prune -a(para remover imagens pendentes e não utilizadas).
Aviso: ' não utilizado ' significa "imagens não referenciadas por nenhum contêiner": tenha cuidado antes de usar-a .

Como ilustrado na AL 's resposta , docker system prune --allirá remover todos os não utilizados imagens não apenas balançando aqueles ... que pode ser um pouco demais.

Combinar docker xxx prunecom a --filteropção pode ser uma ótima maneira de limitar a remoção ( docker SDK API 1.28 no mínimo, portanto docker 17.04+ )

Os filtros atualmente suportados são:

  • until (<timestamp>) - remova apenas contêineres, imagens e redes criadas antes do carimbo de data / hora
  • label( label=<key>, label=<key>=<value>, label!=<key>Ou label!=<key>=<value>) - só remover os recipientes, imagens, redes e volumes com (ou sem , no caso label!=...é usado) os rótulos especificados.

Consulte " Remover imagens " para obter um exemplo.


Resposta original (setembro de 2016)

Eu costumo fazer:

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

Eu tenho um apelido para remover essas [imagens pendentes] 13 :drmi

O dangling=truefiltro encontra imagens não utilizadas

Dessa forma, qualquer imagem intermediária que não seja mais referenciada por uma imagem rotulada será removida.

Eu faço o mesmo primeiro para processos encerrados (contêineres)

alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'

Como haridsv aponta nos comentários :

Tecnicamente, você deve primeiro limpar os contêineres antes de limpar as imagens, pois isso captura mais imagens pendentes e menos erros .


Jess Frazelle (jfrazelle) tem a função bashrc :

dcleanup(){
    docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
    docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}

Para remover imagens antigas e não apenas imagens "pendentes não referenciadas", considere docker-gc:


Um contêiner Docker simples e um script de coleta de lixo de imagens.

  • Os contêineres que saíram há mais de uma hora atrás são removidos.
  • Imagens que não pertencem a nenhum contêiner restante depois disso são removidas.

29
Existe documentação sobre o que "dangling=true"realmente significa?
precisa saber é o seguinte

1
Este script não pode remover algumas imagens
obtidas

2
dcleanupé incrível!
Quanlong

4
@herm Primeiro, docker system pruneremove muito mais do que apenas imagens. Certifique-se de usar em seu docker image prunelugar. E tenha muito cuidado com -a: a docker system prune -apode ter um efeito devastador (removendo volumes também). Finalmente, sim, -aremove imagens não utilizadas, editarei a resposta.
VonC 28/07

2
@stom: 'não utilizado' significa "imagens não referenciadas por nenhum contêiner, mas dangling significa que não está etiquetado de forma alguma (apenas um ID).
VonC

125

Atualize o segundo (08/07/2017):

Consulte (novamente) o VonC, usando o ainda mais recente system prune. O impaciente pode ignorar o prompt com a -f, --forceopção:

docker system prune -f

O impaciente e imprudente pode remover adicionalmente "imagens não utilizadas, não apenas as pendentes" com a -a, --allopção:

docker system prune -af

https://docs.docker.com/engine/reference/commandline/system_prune/

Atualizar:

Consulte a resposta do VonC, que usa os prunecomandos adicionados recentemente . Aqui está a conveniência do alias do shell correspondente:

alias docker-clean=' \
  docker container prune -f ; \
  docker image prune -f ; \
  docker network prune -f ; \
  docker volume prune -f '

Resposta antiga:

Excluir contêineres parados (saídos):

$ docker ps --no-trunc -aqf "status=exited" | xargs docker rm

Exclua imagens não utilizadas (pendentes):

$ docker images --no-trunc -aqf "dangling=true" | xargs docker rmi

Se você tiver tomado muito cuidado com relação à perda irrevogável de dados , poderá excluir volumes não utilizados (pendentes) (v1.9 e posterior):

$ docker volume ls -qf "dangling=true" | xargs docker volume rm

Aqui eles estão em um conveniente apelido de shell:

alias docker-clean=' \
  docker ps --no-trunc -aqf "status=exited" | xargs docker rm ; \
  docker images --no-trunc -aqf "dangling=true" | xargs docker rmi ; \
  docker volume ls -qf "dangling=true" | xargs docker volume rm'

Referências:


3
Eu teria cuidado com a limpeza do volume. Os volumes de contêiner criados automaticamente e os volumes nomeados que não estão em uso no momento são listados junto com o dangling = true.
BMitch

1
@BMitch, você está absolutamente correto; Eu adicionei um aviso severo à docker volume rmreceita. Congratulo-me com todas as sugestões que você tiver.
rubicks

1
Eu adoraria o docker para nos dar uma opção de filtro diferente para os volumes nomeados. Se eu apresentar uma boa solução alternativa, certamente compartilharei.
BMitch 24/06

2
sim, mas infelizmente não separa o volume nomeado de um volume de contêiner anônimo com um sinalizador simples. O comando que eu estou usando é o docker volume ls -qf dangling=true | egrep '^[a-z0-9]{64}$' | xargs --no-run-if-empty docker volume rmque funcionará desde que você nunca nomeie seus volumes com algo semelhante a um guid. Eu posso ajustar isso para a nova sintaxe de filtro.
BMitch 21/09/16

1
A remoção de volumes não utilizados (oscilantes) realmente nos ajuda!
Kane

61

Para remover imagens marcadas antigas com mais de um mês:

$ docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' \
    | grep ' months' | awk '{ print $1 }' \
    | xargs --no-run-if-empty docker rmi

Observe que ele falhará ao remover imagens usadas por um contêiner, referenciadas em um repositório, com imagens filhas dependentes ... o que provavelmente é o que você deseja. Caso contrário, basta adicionar-f bandeira.

Exemplo de /etc/cron.daily/docker-gcscript:

#!/bin/sh -e

# Delete all stopped containers (including data-only containers).
docker ps -a -q --no-trunc --filter "status=exited" | xargs --no-run-if-empty docker rm -v

# Delete all tagged images more than a month old
# (will fail to remove images still used).
docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' | grep ' months' | awk '{ print $1 }' | xargs --no-run-if-empty docker rmi || true

# Delete all 'untagged/dangling' (<none>) images
# Those are used for Docker caching mechanism.
docker images -q --no-trunc --filter dangling=true | xargs --no-run-if-empty docker rmi

# Delete all dangling volumes.
docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm

2
+1 Para o comando excluir imagens antigas do Docker. É um pouco hacky, mas a solução é original e funciona perfeitamente :)
Rick

3
Isso é bom, no entanto, acho que isso exclui apenas imagens do docker com pelo menos 4 meses de idade. .CreatedSinceusa semanas como unidade de tempo na saída, mesmo em imagens com muitas semanas, por exemplo 12 weeks.
Joelittlejohn #

2
Isso funcionou para mim, agradável e simples:docker images | grep ' months' | awk '{ print $3 }' | xargs --no-run-if-empty docker rmi -f
Kent Touro

34

As outras respostas são ótimas, especificamente:

docker system prune # doesn't clean out old images
docker system prune --all # cleans out too much

Mas eu precisava de algo no meio dos dois comandos, então a filteropção era o que eu precisava:

docker image prune --all --filter "until=4320h" # delete images older than 6 months ago; 4320h = 24 hour/day * 30 days/month * 6 months

Espero que ajude :)

Para referência: https://docs.docker.com/config/pruning/#prune-images


1
Resposta muito subestimada! Ser capaz de podar com uma data limite é extremamente útil.
Nik Reiman

24

Supondo que você tenha o Docker 1.13 ou superior, basta usar os comandos de remoção. Para sua pergunta especificamente para remover imagens antigas, você quer a primeira.

# Remove unused images
docker image prune

# Remove stopped containers.
docker container prune

# Remove unused volumes
docker volume prune

# Remove unused networks
docker network prune

# Command to run all prunes:
docker system prune

Eu recomendaria não me acostumar a usar o docker system prunecomando Eu acho que os usuários removerão acidentalmente coisas que não pretendem. Pessoalmente, vou usar principalmente os comandos docker image prunee docker container prune.


4
você não quer remover redes não utilizadas, quer? por exemplo, se todos os contêineres estiverem parados e eu excluir essas redes, como eles funcionarão se eu os iniciar. As redes são criadas juntamente com a docker run?
precisa saber é

@ meffect Eu concordo completamente e Deus descobre que eu havia deixado a poda da rede. Incluí isso e adicionei uma parte no final, afirmando que eu não recomendaria o uso, docker system prunemas as ameixas individuais.
Programster

15

Até agora (Docker versão 1.12), estamos usando o seguinte comando para excluir todos os contêineres em execução. Além disso, se quisermos excluir os volumes, podemos fazer isso manualmente usando sua respectiva tag -v no comando a seguir.

Excluir todos os contêineres encerrados

docker rm $(docker ps -q -f status=exited)

Excluir todos os contêineres parados

docker rm $(docker ps -a -q)

Excluir todos os contêineres em execução e parados

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

Remova todos os recipientes, sem nenhum critério

docker container rm $(docker container ps -aq)

Porém, na versão 1.13 e superior, para limpeza e sistema completos, podemos usar diretamente o seguinte comando:

docker system prune

Todos os contêineres, imagens, redes e volumes não utilizados serão excluídos. Também podemos fazer isso usando os seguintes comandos que limpam os componentes individuais:

docker container prune
docker image prune
docker network prune
docker volume prune

14

Isso funcionou para mim:

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

13

O comando a seguir excluirá imagens com mais de 48 horas.

$ docker image prune --all --filter until=48h

1
Também é possível usar filtros para listar todas as versões anteriores a uma versão especificada: docker image ls --all --filter reference=monolito --filter before=monolito:0.1.8e aplique um comando rmi para excluir. docker rmi $(docker image ls -q --all --filter reference=monolito --filter before=monolito:0.1.8)
rodvlopes

9

Recentemente, escrevi um script para resolver isso em um dos meus servidores:

#!/bin/bash

# Remove all the dangling images
DANGLING_IMAGES=$(docker images -qf "dangling=true")
if [[ -n $DANGLING_IMAGES ]]; then
    docker rmi "$DANGLING_IMAGES"
fi

# Get all the images currently in use
USED_IMAGES=($( \
    docker ps -a --format '{{.Image}}' | \
    sort -u | \
    uniq | \
    awk -F ':' '$2{print $1":"$2}!$2{print $1":latest"}' \
))

# Get all the images currently available
ALL_IMAGES=($( \
    docker images --format '{{.Repository}}:{{.Tag}}' | \
    sort -u \
))

# Remove the unused images
for i in "${ALL_IMAGES[@]}"; do
    UNUSED=true
    for j in "${USED_IMAGES[@]}"; do
        if [[ "$i" == "$j" ]]; then
            UNUSED=false
        fi
    done
    if [[ "$UNUSED" == true ]]; then
        docker rmi "$i"
    fi
done

8

Aqui está um script para limpar imagens do Docker e recuperar o espaço.

#!/bin/bash -x
## Removing stopped container
docker ps -a | grep Exited | awk '{print $1}' | xargs docker rm

## If you do not want to remove all container you can have filter for days and weeks old like below
#docker ps -a | grep Exited | grep "days ago" | awk '{print $1}' | xargs docker rm
#docker ps -a | grep Exited | grep "weeks ago" | awk '{print $1}' | xargs docker rm

## Removing Dangling images
## There are the layers images which are being created during building a Docker image. This is a great way to recover the spaces used by old and unused layers.

docker rmi $(docker images -f "dangling=true" -q)

## Removing images of perticular pattern For example
## Here I am removing images which has a SNAPSHOT with it.

docker rmi $(docker images | grep SNAPSHOT | awk '{print $3}')

## Removing weeks old images

docker images | grep "weeks ago" | awk '{print $3}' | xargs docker rmi

## Similarly you can remove days, months old images too.

Roteiro original

https://github.com/vishalvsh1/docker-image-cleanup

Normalmente, o Docker mantém todos os arquivos temporários relacionados à criação e às camadas de imagens em

/ var / lib / docker

Esse caminho é local para o sistema, geralmente na partição raiz, " " / " .

Você pode montar um espaço em disco maior e mover o conteúdo de /var/lib/docker para o novo local de montagem e criar um link simbólico.

Dessa forma, mesmo que as imagens do Docker ocupem espaço, isso não afetará o sistema, pois estará usando outro local de montagem.

Postagem original: Gerenciar imagens do Docker no disco local


6

Estou usando este comando:

export BEFORE_DATETIME=$(date --date='10 weeks ago' +"%Y-%m-%dT%H:%M:%S.%NZ")
docker images -q | while read IMAGE_ID; do
    export IMAGE_CTIME=$(docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID})
    if [[ "${BEFORE_DATETIME}" > "${IMAGE_CTIME}" ]]; then
        echo "Removing ${IMAGE_ID}, ${BEFORE_DATETIME} is earlier then ${IMAGE_CTIME}"
        docker rmi -f ${IMAGE_ID};
    fi;
done

Isso removerá todas as imagens cujo tempo de criação é maior que 10 semanas atrás.


Eu acho que você trocou IMAGE_CTIMEe BEFORE_DATETIMEnesse echocomando
Udo G

5

Se você deseja remover imagens extraídas X meses atrás, tente o exemplo abaixo, que remove imagens criadas há três meses:

three_months_old_images=`docker images | grep -vi "<none>" | tr -s ' ' | cut -d" " -f3,4,5,6 | grep "3 months ago" | cut -d" " -f1`
docker rmi $three_months_old_images

1
Isso não está correto. Isso remove imagens criadas há 3 meses, e não imagens obtidas há 3 meses (se você as extrair de uma fonte remota, elas já podem ter 3 meses imediatamente).
Andrew Ferrier

Isso me ajudou a criar mais filtros, com base em diferentes critérios
david.sansay

4

Para remover todas as imagens e volumes também
docker system prune -af --volumes


3

docker system prune -a

(Você será solicitado a confirmar o comando. Use -fpara forçar a execução, se você souber o que está fazendo.)


5
Isso é perigoso , consulte outros comentários sobre como docker system pruneremover volumes nomeados -a.
RichVel 23/08

3

O @VonC já deu uma resposta muito boa, mas, para completar, aqui está um pequeno script que eu tenho usado --- e que também destrói todos os processos do Docker, caso você tenha alguns:

#!/bin/bash

imgs=$(docker images | awk '/<none>/ { print $3 }')
if [ "${imgs}" != "" ]; then
   echo docker rmi ${imgs}
   docker rmi ${imgs}
else
   echo "No images to remove"
fi

procs=$(docker ps -a -q --no-trunc)
if [ "${procs}" != "" ]; then
   echo docker rm ${procs}
   docker rm ${procs}
else
   echo "No processes to purge"
fi

Funciona muito bem, mas ainda é possível Error response from daemon: You cannot remove a running container. Adicionado docker kill $(docker ps -q)antes da linha 3 para o endereço
Vincent

Por que não usar em $(docker images -q)vez de $(docker images | awk '/<none>/ { print $3 }')?
SeF

1
@ SeF: Se eu docker images -qreceber um vetor de IDs de imagem, nada mais. Se eu fizer o que faço, recebo mais - permitindo que eu filtre <none>como faço aqui. Faz sentido?
Dirk Eddelbuettel

2

Para remover imagens marcadas que não possuem contêiner em execução, você precisará usar um pequeno script:

#!/bin/bash

# remove not running containers
docker rm $(docker ps -f "status=exited" -q)

declare -A used_images

# collect images which has running container
for image in $(docker ps | awk 'NR>1 {print $2;}'); do
    id=$(docker inspect --format="{{.Id}}" $image);
    used_images[$id]=$image;
done

# loop over images, delete those without a container
for id in $(docker images --no-trunc -q); do
    if [ -z ${used_images[$id]} ]; then
        echo "images is NOT in use: $id"
        docker rmi $id
    else
        echo "images is in use:     ${used_images[$id]}"
    fi
done

2

Remova os contêineres antigos semanas atrás.

docker rm $(docker ps -a | grep "weeks" | awk '{ print $1; }')

Remova as imagens antigas semanas atrás. Seja cuidadoso. Isso removerá as imagens de base criadas há semanas, mas que as novas imagens podem estar usando.

docker rmi $(docker images | grep 'weeks' | awk '{ print $3; }')


2

Como remover uma imagem marcada

  1. docker rmi a tag primeiro

  2. docker rmi a imagem.

    # que pode ser feito em uma chamada do docker rmi, por exemplo: # docker rmi <repo: tag> <imageid>

(funciona em novembro de 2016, versão 1.12.2 do Docker)

por exemplo

$ docker images 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
usrxx/the-application   16112805            011fd5bf45a2        12 hours ago        5.753 GB
usryy/the-application   vx.xx.xx            5af809583b9c        3 days ago          5.743 GB
usrzz/the-application   vx.xx.xx            eef00ce9b81f        10 days ago         5.747 GB
usrAA/the-application   vx.xx.xx            422ba91c71bb        3 weeks ago         5.722 GB
usrBB/the-application   v1.00.18            a877aec95006        3 months ago        5.589 GB

$ docker rmi usrxx/the-application:16112805 && docker rmi 011fd5bf45a2
$ docker rmi usryy/the-application:vx.xx.xx && docker rmi 5af809583b9c
$ docker rmi usrzz/the-application:vx.xx.xx eef00ce9b81f
$ docker rmi usrAA/the-application:vx.xx.xx 422ba91c71bb
$ docker rmi usrBB/the-application:v1.00.18 a877aec95006

Por exemplo, com script remova qualquer coisa com mais de 2 semanas.

IMAGESINFO=$(docker images --no-trunc --format '{{.ID}} {{.Repository}} {{.Tag}} {{.CreatedSince}}' |grep -E " (weeks|months|years)")
TAGS=$(echo "$IMAGESINFO" | awk '{ print $2 ":" $3 }' )
IDS=$(echo "$IMAGESINFO" | awk '{ print $1 }' )
echo remove old images TAGS=$TAGS IDS=$IDS
for t in $TAGS; do docker rmi $t; done
for i in $IDS; do docker rmi $i; done

2
docker rm $(docker ps -faq)
docker rmi $(docker ps -faq)

-f force

-um tudo

-q no modo


1
docker rm `docker ps -aq`

ou

docker rm $(docker ps -q -f status=exited)

3
Eu acho que essa resposta é perigosa porque esses comandos removem contêineres. Em primeiro lugar, o OP estava perguntando como remover imagens, não contêineres. E o mais importante, esses comandos podem causar perda de dados, pois as pessoas podem ter alguns dados valiosos nos contêineres encerrados.
u.unver34

Você deve descrever resultados potencialmente indesejados da aplicação desses comandos no servidor de produção.
Daniel

isso remove contêineres, não imagens.
SeF

1

Ocasionalmente, tenho problemas com os quais o Docker alocará e continuará usando o espaço em disco, mesmo quando o espaço não estiver alocado para nenhuma imagem específica ou contêiner existente. A maneira mais recente de gerar esse problema acidentalmente foi usando a compilação de centos "docker-engine" em vez de "docker" no RHEL 7.1. O que parece acontecer é que, às vezes, as limpezas dos contêineres não são concluídas com êxito e o espaço nunca é reutilizado. Quando a unidade de 80 GB que aloquei como / foi preenchida com arquivos / var / lib / docker, tive que criar uma maneira criativa de resolver o problema.

Aqui está o que eu vim com. Primeiro para resolver o erro de disco cheio:

  1. Parar janela de encaixe: systemctl stop docker
  2. Alocou uma nova unidade montada como say / mnt / docker.
  3. Mova todos os arquivos em / var / lib / docker para / mnt / docker. Eu usei o comando: rsync -aPHSx --remove-source-files / var / lib / docker / / mnt / docker /
  4. Monte a nova unidade em / var / lib / docker.

Nesse ponto, eu não tinha mais um erro de disco cheio, mas ainda estava desperdiçando uma quantidade enorme de espaço. Os próximos passos são para cuidar disso.

  1. Iniciar Docker: systemctl start docker

  2. Salve todas as imagens: janela de encaixe save $ (imagens de janela de encaixe | sed -e '/ ^ / d' -e '/ ^ REPOSITORY / d' -e 's, [] [] ,:,' -e 's, [ ]. ,, ')> /root/docker.img

  3. Desinstale a janela de encaixe.

  4. Apague tudo em / var / lib / docker: rm -rf / var / lib / docker / [cdintv] *

  5. Reinstalar a janela de encaixe

  6. Ativar janela de encaixe: systemctl enable docker

  7. Iniciar janela de encaixe: systemctl start docker

  8. Restaurar imagens: carregamento do docker </root/docker.img

  9. Inicie todos os contêineres persistentes que você precisa em execução.

Isso reduziu o uso do meu disco de 67 GB para docker para 6 GB para docker.

Eu não recomendo isso para o uso diário. Mas é útil executar quando parece que o docker perdeu o controle do espaço em disco usado devido a erros de software ou reinicializações inesperadas.


1

Se você deseja limpar automaticamente / periodicamente os contêineres existentes e remover imagens e volumes que não estão em uso por um contêiner em execução, é possível fazer o download da imagem meltwater/docker-cleanup .

Apenas corra:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

É executado a cada 30 minutos por padrão. No entanto, você pode definir o tempo de atraso usando esse sinalizador em segundos (opção DELAY_TIME = 1800).

Mais detalhes: https://github.com/meltwater/docker-cleanup/blob/master/README.md


1

Se você mesmo criar essas imagens removidas (de outras imagens básicas mais antigas), tenha cuidado com as soluções aceitas acima, com base em docker image prune, pois o comando é brusco e tentará remover também todas as dependências exigidas pelas imagens mais recentes (o comando deve ser provavelmente renomeado paradocker image*s* prune ).

A solução que eu encontrei para meus pipelines de criação de imagem de janela de encaixe (onde existem compilações diárias e tags = datas estão no YYYYMMDDformato) é esta:

# carefully narrow down the image to be deleted (to avoid removing useful static stuff like base images)
my_deleted_image=mirekphd/ml-cpu-py37-vsc-cust

# define the monitored image (tested for obsolescence), which will be usually the same as deleted one, unless deleting some very infrequently built image which requires a separate "clock"
monitored_image=mirekphd/ml-cache

# calculate the oldest acceptable tag (date)
date_week_ago=$(date -d "last week" '+%Y%m%d')

# get the IDs of obsolete tags of our deleted image
# note we use monitored_image to test for obsolescence
my_deleted_image_obsolete_tag_ids=$(docker images --filter="before=$monitored_image:$date_week_ago" | grep $my_deleted_image | awk '{print $3}')

# remove the obsolete tags of the deleted image
# (note it typically has to be forced using -f switch)
docker rmi -f $my_deleted_image_obsolete_tag_ids


0

Primeiro, corra docker imagespara ver a lista de imagens e copie o IMAGE HASH ID na área de transferência.

Corre docker rmi -f <Image>

A opção Lembrar -fé forçar exclusão.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.