Ir ao conteúdo

Troubleshoot – Docker (Hyper-v): An attempt was made to access a socket in a way forbidden by its access permissions.

Esse é o primeiro post de uma série de posts sobre Troubleshoots de alguns problemas que podemos nos deparar no cotidiano e que quebramos a cabeça para encontrar a solução no StackOverflow, nos issues do GitHub ou em outros foruns.

Neste post, o Troubleshoot problema no Docker (Windows 10 com Hyper-v), gerado ao tentar instalar qualquer imagem. O erro foi o seguinte:

An attempt was made to access a socket in a way forbidden by its access permissions.

No meu caso, o erro ocorreu ao instalar e subir a imagem do Zookeeper, mas pela pesquisa que fiz, é possível resolver esse erro em outros imagens que apresentarem o mesmo problema.

Problema

Conforme havia dito no sumário acima, o problema ocorreu quando eu estava instalando a imagem do Zookeeper. Infelizmente, não tirei um print para mostrar à vocês… mas, a mensagem do erro foi a seguinte:

Error starting userland proxy: listen tcp 0.0.0.0:2181: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

Na pesquisa que fiz, esse problema é comum. Por mais que você tenha todas as configurações corretas na sua máquina e que você já tenha subido a imagem antes, o problema acontece.

De forma simples e sem muito detalhe, por algum motivo o Hyper-v bloqueia a porta utilizada por qualquer container do Docker, no meu caso foi o Zookeeper (porta 2181). Então, a resolução é reservar essa porta.

Aparentemente, o problema começou a ocorrer nas últimas atualizações do Docker. Mas, conheço outras pessoas que atualizaram e não tiveram esse problema. De qualquer forma, a resolução evita esse problema novamente.

Mais detalhes: Unable to bind ports: Docker-for-Windows & Hyper-V excluding but not using important port ranges #3171

Solução

A resolução é simples é apenas reservar a porta para que não ocorra novamente esse problema. Para isso, vamos reiniciar o Hyper-v.

Vamos seguir os passos a abaixo. E para todos eles, você vai deve executar os comandos no CMD em modo Administrativo executando na pasta System32( C:\WINDOWS\System32) :

1. Desativando Hyper-v: execute no CMD aberto, a linha comando abaixo

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

Durante o processo para desativar o Hyper-v, será necessário reiniciar a sua máquina.

Depois de reinicia-la, o Docker vai mostrar a mensagem de erro abaixo, porque ele não conseguiu ser iniciado (o Hyper-v está desativado), mas que ele pode tentar ativa-lo novamente.

Clique em Cancel, para cancelar essa ação do Docker. E vai aparecer a mensagem abaixo:

Clique em OK. Porque, temos que fazer o passo seguinte para ativar o Hyper-v novamente.

2. Reservando a porta para que o Hyper-v não reserve-a novamente: execute o comando abaixo:

netsh int ipv4 add excludedportrange protocol=tcp startport=2181 numberofports=1

Ao executa-lo, vai ter essa mensagem (Ok .):

3. Reativar o Hyper-v: execute a linha de comando abaixo (durante o processo, vai ser necessário reiniciar a sua máquina):

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

Vai mostrar a mensagem que a operação foi completada com sucesso e vai pedir para reiniciar a sua máquina (imagem abaixo). Fez tudo que estava aberto e digite Y, para reiniciar imediatamente.

Depois de reiniciar a máquina, o Docker deve subir normalmente. Pronto!

É isso ai pessoal! Rápido e objetivo!

Descritivo da solução

Referências

  1. Solução: Unable to bind ports: Docker-for-Windows & Hyper-V excluding but not using important port ranges #3171
  2. https://forums.docker.com/t/an-attempt-was-made-to-access-a-socket-in-a-way-forbidden-by-its-access-permissions/9343
Publicado emTroubleshoot