Saudações.
Um update recente do Docker descontinuou a API legado (1.24) e restringiu ao uso da versão moderna (1.44+). O resultado foi a quebra de vários serviços que controlavam o Docker, incluindo os importantes Portainer e Traefik.
Esse tutorial/dica apresenta uma forma de resolver de maneira rápida e pontual.
Nota: você só deve aplicar esse tutorial se seu Docker foi atualizado e provocou o problema.
Pré-requisitos (constam em outros artigos aqui do blog):
- Instalação do Linux (Debian);
- Internet no servidor;
- Docker CE instalado;
1 – Conferindo suporte API
Teste se seu Docker foi atualizado e possui o problema:
# Instalar comadno jq para interpretar JSON no terminal:
apt -y install jq;
# Conferindo config da API
curl \
--silent \
-X GET \
--unix-socket \
/run/docker.sock http://localhost/version | jq .;
# Filtrar versoes de API suportadas:
curl \
--silent \
-X GET \
--unix-socket /run/docker.sock \
http://localhost/version | jq . | grep -i ApiVersion;
# Conferindo suporte a API nova:
curl \
--silent \
-X GET \
--unix-socket /run/docker.sock http://localhost/v1.44/version | jq .;
# Conferindo suporte a API legacy:
curl \
--silent \
-X GET \
--unix-socket /run/docker.sock http://localhost/v1.24/version | jq .;
# Erro ao consultar a v1.24 acima:
# {
# "message": "client version 1.24 is too old.
# Minimum supported API version is 1.44,
# please upgrade your client to a newer version"
# }
Se ao consultar a API 1.24 o erro de “please upgrade your client to a newer version“, você precisará aplicar o ajuste abaixo para restaurar os serviços parados.
2 – Ativando API legacy novamente
Será necessário alterar a configuração do Docker no arquivo /etc/docker/daemon.json.
Se este arquivo existe, adicione o parâmetro abaixo no objeto JSON:
{
"min-api-version": "1.24"
}Se o arquivo não existe, use meu script:
# Criar config inicial do Docker:
if [ -f /etc/docker/daemon.json ]; then
echo "# daemon.json ja existe, edite-o com seguranca";
else
echo "# criando daemon.json com suporte API legacy";
(
echo '{';
echo ' "min-api-version": "1.24",';
echo ' "max-concurrent-uploads": 16,';
echo ' "max-concurrent-downloads": 16';
echo '}';
) > /etc/docker/daemon.json;
echo "# concluido";
fi;
Reinicie o Docker:
# Reiniciar docker:
systemctl restart docker;
Testar se a API legacy foi restaurada:
# Conferindo suporte a API legacy:
curl \
--silent \
-X GET \
--unix-socket /run/docker.sock \
http://localhost/version | jq . | grep -i ApiVersion;
# Retorno esperado: "MinAPIVersion": "1.24"
# "ApiVersion": "1.52",
# "MinAPIVersion": "1.24",
“Eu arrasei, eu ja sei, de nada!” Autor: Maui
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
