Gerenciamento remoto de um host Docker do Windows

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

As etapas são muito simples:

  • Crie os certificados no servidor usando dockertls. Se você for criar os certificados com um endereço IP, convém usar um IP estático para evitar a necessidade de recriar os certificados quando o endereço IP mudar.

  • Reinicie o serviço do docker Restart-Service Docker

  • Disponibilize as portas TLS 2375 e 2376 do docker criando uma regra NSG permitindo 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

  • Permita 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 copiar e colar os arquivos em uma sessão RDP.
  • Confirme se você pode se conectar ao Host Docker remoto. Executar 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 conectar sem o TLS para determinar se as configurações do firewall 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.

Permita conexões não criptografadas, adicionando

{
    "tlsverify":  false,
}

a 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 Docker com um certificado não criado para o endereço IP ou 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

Certifique-se de que w.x.y.z seja 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 receber um aviso

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

O aviso é benigno.