Olá pessoal! Já fazia tempo que não postava nada aqui, mas hoje vou postar esse troubleshoot que tive que fazer porque atualizei o Docker e voltei a tomar esse erro:
An attempt was made to access a socket in a way forbidden by its access permissions.
Falei “voltei”, porque anteriomente ocorre isso… eu até postei o troubleshoot da resolução (http://charlesmms.azurewebsites.net/2019/10/24/troubleshoot-docker-an-attempt-was-made-to-access-a-socket-in-a-way-forbidden-by-its-access-permissions/), mas eu estava usando o Docker no Windows com hyper-v e fiz via CMD. Contudo, neste caso estou usando o Docker no Windows com o WLS 2 (Windows Subsystem for Linux) e fiz com bash.
Problema
Basicamente, o problema ocorre quado tentamos rodar uma imagem no Docker, aparecendo a seguinte mensagem:
Na pesquisa que fiz (sem muita profundidade), esse problema é comum quando é feito atualizações no Docker. E por mais que você tenha todas as configurações corretas em sua máquina, o problema pode acontecer ao atualizar o seu docker.
E o motivo do problema é que o Hyper-v bloqueia um range de portas e pode pegar algumas portas que são utilizadas por containers do Docker, no meu caso foi do Cassandra (porta 9042). Então, a resolução é reservar essa porta.
Mais detalhes: Unable to bind ports: Docker-for-Windows & Hyper-V excluding but not using important port ranges #3171
Solução
A resolução é apenas reservar a porta para que não ocorra novamente esse problema. Para isso vamos abrir o bash como administrador:
1º Verifique se a porta necessária está reservada, executando esse comando:
netsh interface ipv4 show excludedportrange protocol=tcp
Se sua porta estiver em um dos ranges, pare o winnat:
net stop winnat
Proibir reserva dinâmica para a porta necessária, no meu caso foi a 9042:
netsh int ipv4 add excludedportrange protocol=tcp startport=9042 numberofports=1
Reinicie o winnat:
net start winnat
E pronto! Deve funcionar:
Descritivo da solução original