Docker implementou recentemente um limite de taxa de pull para usuários anônimos e gratuitos. Os limites são 100 (anon) e 200 (grátis) solicitações de pull de imagem de contêiner a cada seis horas.
As compilações estão começando a falhar devido a esse limite e precisaremos implementar uma correção ou solução alternativa.
docker build -t hub.libelektra.org/build-elektra-alpine:202012-0e6d95bb97e68999c969280c59562b159b8a0ecbee2a5aba451fe640081032de --pull --build-arg JENKINS_GROUPID=47110 --build-arg JENKINS_USERID=47110 --build-arg PARALLEL=12 --build-arg BASE_IMG=hub.libelektra.org/build-elektra-web-base:master_299 -f ./scripts/docker/alpine/3.12/Dockerfile ./scripts/docker/alpine/3.12
Sending build context to Docker daemon 6.144kB
Step 1/7 : FROM alpine:3.12.1
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
script returned exit code 1
Nosso servidor de compilação deve, na verdade, extrair apenas de nosso registro docker privado, nunca de docker.org.
O problema talvez seja apenas uma configuração que não alteramos em hub.libelektra.org? Ou existem imagens que não estão espelhadas em hub.libelektra.org?
@robaerd pode dar uma olhada? É urgente, pois afeta nossas construções.
Ou existem imagens que não estão espelhadas em hub.libelektra.org?
Parece que ele sempre verifica se há imagens de base atualizadas que não estão em nosso hub ...
Parece que ele sempre verifica se há imagens de base atualizadas que não estão em nosso hub ...
Isso faz parte da reconstrução mensal das imagens do docker, pois o mês faz parte do id da imagem.
As imagens do docker estão atualmente em cache novamente, portanto, nenhuma reconstrução das imagens do docker deve acontecer e, portanto, o erro não deve ocorrer novamente pelo menos neste mês.
Ainda não tenho certeza de como poderíamos exceder o limite de 100 pull com nossas ~ 14 imagens do docker.
Obrigado por investigar isso. : sparkling_heart: Sim, parece um pouco estranho: se forem apenas 14 imagens do docker e extrairmos apenas mensalmente, deveríamos estar bem abaixo de qualquer limite?
Parece que ele sempre verifica se há imagens de base atualizadas que não estão em nosso hub ...
O hub.libelektra.org está configurado assim: https://docs.docker.com/registry/recipes/mirror ? Em caso afirmativo, meu entendimento é que verificar se a imagem está atualizada deve contar apenas para a cota, se realmente precisar puxar uma nova imagem.
A maneira mais fácil de contornar a cota seria criar uma conta Docker Hub para o IC. Existe um programa de código aberto , então provavelmente seríamos elegíveis para uma conta ilimitada.
Eu poderia fazer o aplicativo se ajudar. Mas primeiro devemos descobrir qual é realmente o problema.
Não sei como o Docker Hub rastreia o limite de taxa. Presumo que seja baseado no IP, caso contrário, seria muito fácil redefinir localmente. Nesse caso, nosso servidor de compilação é a única coisa que apareceria no Docker Hub por meio desse IP?
Sim, o servidor de build tem um IP dedicado, até mesmo vários, e o CI é a única parte que usa docker.
se forem apenas 14 imagens do docker e extrairmos apenas mensalmente, devemos estar bem abaixo de qualquer limite?
Parece que o Jenkins Pipeline executa um trabalho (acho que para o site) que tenta extrair do Docker Hub o tempo todo: https://build.libelektra.org/blue/organizations/jenkins/libelektra/detail/PR-3589 / 5 / pipeline / 696
AFAIK isso acontece por causa do uso de build --pull
.
Provavelmente deveríamos apenas usar build
(sem --pull
) por padrão e executá-lo com --pull
semanal ou mensalmente.
Obrigado por descobrir! : sparkling_heart:
Obrigado por encontrar a causa deste problema!
Como alternativa para remover --pull
, também poderíamos criar uma imagem base para a base webui sem elektra instalado ainda (apenas com as dependências e gtests instalados). Essa imagem de base seria então - como as outras - construída mensalmente e a imagem de base do webui se estenderia a partir dessa imagem de base e apenas puxaria de nosso registro docker privado (e, portanto, não afetaria o limite de pull)
base webui sem elektra instalado ainda
Eu gosto desta ideia! Independentemente dos limites de pull do Docker, isso seria uma melhoria!
base webui sem elektra instalado ainda
Sim, isso também seria uma opção. A imagem em questão já é a imagem base para as imagens webui
e elektrad
reais. Portanto, poderíamos simplesmente mover a cópia e a construção do Elektra para os outros Dockerfiles. Ou talvez haja uma solução com compilações de vários estágios? Não tenho certeza se os estágios intermediários podem ser empurrados para / puxados de registros.
Ontem eu estava testando a biblioteca compartilhada em jenkins onde apenas o pull-stage foi executado. Sem construção de imagem, apenas puxando de nosso registro docker privado em hub.libelektra.org e ainda recebo o erro de limite de taxa do Docker. Procurei um pouco mais a fundo e consegui descobrir a causa do nosso problema.
É watchtower
, um contêiner em execução que atualiza nossas imagens em intervalos especificados. Esse problema deve ser corrigido em sua versão mais recente . Vou atualizar esta imagem e definir o intervalo de votação para um valor mais alto.
Os registros do contêiner da torre de vigia também confirmam minha suposição.
time="2020-11-16T22:22:58Z" level=info msg="Unable to update container /frontend_repo_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:22:59Z" level=info msg="Unable to update container /frontend_registry_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:23:00Z" level=info msg="Unable to update container /frontend_letsencrypt-nginx-proxy-companion_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:23:01Z" level=info msg="Unable to update container /frontend_nginx-proxy_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:23:02Z" level=info msg="Unable to update container /frontend_watchtower_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:23:04Z" level=info msg="Unable to update container /frontend_libelektra-webui_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:23:28Z" level=info msg="Unable to update container /frontend_repo_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:23:29Z" level=info msg="Unable to update container /frontend_registry_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
time="2020-11-16T22:23:30Z" level=info msg="Unable to update container /frontend_letsencrypt-nginx-proxy-companion_1, err='Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit'. Proceeding to next."
Muito obrigado por descobrir: sparkling_heart:
@robaerd podemos fechar isso ou temos mais alguma coisa para fazer?
Todas as imagens docker usadas no estágio de artefato (webui, site, testes de pacote) ainda são extraídas de docker.org em vez de nosso registro privado. Eu acho que isso provavelmente deveria ser um problema separado, já que nunca excederíamos o limite de puxar do docker com isso. Mas desde a atualização da imagem da torre de vigia, este problema deve ser corrigido e IMHO pode ser fechado.
Provavelmente, nada mais precisa ser feito. Se não atingirmos os limites, não há problema em puxar do docker.org.
Comentários muito úteis
Parece que o Jenkins Pipeline executa um trabalho (acho que para o site) que tenta extrair do Docker Hub o tempo todo: https://build.libelektra.org/blue/organizations/jenkins/libelektra/detail/PR-3589 / 5 / pipeline / 696
AFAIK isso acontece por causa do uso de
build --pull
.Provavelmente deveríamos apenas usar
build
(sem--pull
) por padrão e executá-lo com--pull
semanal ou mensalmente.