Compartilhar via


Gerenciamento remoto de um host do Docker do Windows

Mesmo na ausência de docker-machine ainda é possível criar um Host do Docker acessível remotamente em uma VM do Windows Server.

As etapas são:

  • Crie os certificados no servidor usando dockertls. Se você estiver criando os certificados com um endereço IP, convém considerar um IP estático para evitar a necessidade de recriar certificados quando o endereço IP for alterado.
  • Reinicie o serviço docker Restart-Service Docker
  • Disponibilize as portas TLS 2375 e 2376 do Docker criando uma regra NSG que permite o tráfego de entrada. Observe que, para conexões seguras, você só precisa permitir 2376. O portal deve mostrar uma configuração de NSG como esta: NGSs
  • Permitir conexões de entrada por meio do Firewall do Windows.
New-NetFirewallRule -DisplayName 'Docker SSL Inbound' -Profile @('Domain', 'Public', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2376
  • Copie os arquivos ca.pem, 'cert.pem' e 'key.pem' da pasta docker do usuário em seu computador, por exemplo, c:\users\chris\.docker para seu computador local. Por exemplo, você pode usar ctrl-c e ctrl-v para copiar e colar os arquivos de uma sessão RDP.
  • Confirme se você pode se conectar ao host remoto do Docker. Execute:
docker -D -H tcp://wsdockerhost.southcentralus.cloudapp.azure.com:2376 --tlsverify --tlscacert=c:\
users\foo\.docker\client\ca.pem --tlscert=c:\users\foo\.docker\client\cert.pem --tlskey=c:\users\foo\.doc
ker\client\key.pem ps

Solução de problemas

Tente se conectar sem TLS para determinar se as configurações de firewall do NSG estão corretas

Erros de conectividade normalmente se manifestam em erros como:

error during connect: Get https://wsdockerhost.southcentralus.cloudapp.azure.com:2376/v1.25/version: dial tcp 13.85.27.177:2376: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

Permitir conexões não criptografadas, adicionando

{
    "tlsverify":  false,
}

para c"\programdata\docker\config\daemon.json e reinicie o serviço.

Conecte-se ao host remoto com uma linha de comando como:

docker -H tcp://wsdockerhost.southcentralus.cloudapp.azure.com:2376 --tlsverify=0 version

Problemas de certificado

Acessar o Host do Docker com um certificado não criado para o endereço IP ou o nome DNS resultará em um erro:

error during connect: Get https://w.x.y.c.z:2376/v1.25/containers/json: x509: certificate is valid for 127.0.0.1, a.b.c.d, not w.x.y.z

Verifique se w.x.y.z é o nome DNS para o IP público do host e que o nome DNS corresponda ao Nome Comum do certificado, que foi a variável de ambiente SERVER_NAME ou um dos endereços IP na variável IP_ADDRESSES fornecida aos dockertls

aviso crypto/x509

Você pode estar recebendo um aviso

level=warning msg="Unable to use system certificate pool: crypto/x509: system root pool is not available on Windows"

O aviso é benigno.