O daemon do Docker fornece um API REST remota. Essa API é usada pelo cliente para se comunicar com o mecanismo. Essa API também pode ser invocada por outras ferramentas, como enrolar ou Cliente REST do Postman para Chrome.
Se você estiver criando daemons do Docker usando o Docker Machine no OSX Mavericks, fazer com que essa API funcione é um pouco complicado. Este blog explicará como ativar a API do Docker Remote em Docker Machines criadas no Mac OS X.
Conexão com a porta segura do Docker usando curl fornece o comando como:
1 2 3 4 |
$ enrolar https://$HOST:2376/images/json --certificado ~/.doca/certificado.pem --chave ~/.doca/chave.pem --cacert ~/.doca/ca.pem |
Há alguns problemas com esse comando:
- Esse comando não funciona nem mesmo para o Docker Machine, pois os certificados de cada máquina são armazenados em
.docker/machine/machines/
diretório. - Mesmo que esse comando seja modificado para corresponder a esse caminho:
1enrolar https://192.168.99.100:2376/images/json --cert $DOCKER_CERT_PATH/cert.pem --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem
Ele ainda apresenta o seguinte erro:
1enrolar: (58) SSL: Pode't carregar o certificado "/Users/arungupta/.docker/machine/machines/couchbase/cert.pem" e seu privado chave: OSStatus -25299
O culpado por isso é um Utilitário curl atualizado para usuários do OSX Mavericks. Em resumo, a nova versão do CURL usa a API Secure Transport da Apple em vez da API OpenSSL. Isso significa que os certificados precisam estar no formato P12.
Vamos consertar isso!
- Vá para o diretório em que os certificados de sua máquina estão armazenados. No meu caso, é
.docker/machine/machines/couchbase
diretório. - Gerar
*.p12
formato para o certificado:
12345678openssl pkcs12 -exportação-chave chave.pem-em certificado.pem-CAfile ca.pem-cadeia-nome cliente-lado-fora certificado.p12-senha passe:mypass - Agora, invoque a API REST como:
1enrolar https://192.168.99.100:2376/images/json --cert $DOCKER_CERT_PATH/cert.p12 --pass mypass --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem
Aviso,--cert
agora aponta para o certificado p12 gerado e a senha do certificado é especificada no texto--passar
.Isso retornará o resultado como:
1[{"Id":"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a","ParentId":"","RepoTags":["arungupta/couchbase:latest"],"RepoDigests":nulo,"Criado":1450330075,"Tamanho":374824677,"VirtualSize":374824677,"Rótulos":{}}]OK, agora isso faz sentido!
- Vamos tentar começar Servidor Couchbase como:
12~ > doca executar -d -p 8091-8093:8091-8093 -p 11210:11210 arungupta/couchbase42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e
E invoque outra API REST para ver mais detalhes sobre esse contêiner:
12~ > enrolar https://192.168.99.100:2376/containers/json --cert $DOCKER_CERT_PATH/cert2.p12 --pass mypass --key $DOCKER_CERT_PATH/key.pem --cacert $DOCKER_CERT_PATH/ca.pem[{"Id":"42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e","Nomes":["/admiring_pike"],"Imagem":"arungupta/couchbase","ImageID":"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a","Comando":"/entrypoint.sh /opt/couchbase/configure-cluster.sh","Criado":1454850194,"Portas":[{"IP":"0.0.0.0","PrivatePort":8092,"PublicPort":8092,"Tipo":"tcp"},{"PrivatePort":11207,"Tipo":"tcp"},{"IP":"0.0.0.0","PrivatePort":11210,"PublicPort":11210,"Tipo":"tcp"},{"PrivatePort":18092,"Tipo":"tcp"},{"PrivatePort":18091,"Tipo":"tcp"},{"IP":"0.0.0.0","PrivatePort":8093,"PublicPort":8093,"Tipo":"tcp"},{"IP":"0.0.0.0","PrivatePort":8091,"PublicPort":8091,"Tipo":"tcp"},{"PrivatePort":11211,"Tipo":"tcp"}],"Rótulos":{},"Status":"Up 2 seconds" (2 segundos para cima),"HostConfig":{"NetworkMode":"default"},"NetworkSettings" (Configurações de rede):{"Redes":{"ponte":{"IPAMConfig":nulo,"Links":nulo,"Aliases":nulo,"NetworkID":"","EndpointID":"6feaf4c1c70feaf0ba240ce55fb58ce83ebb84c8098bef9171998e84f607fa0b","Gateway":"172.17.0.1","IPAddress" (endereço IP):"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02"}}}}]
Leia o API completa e enlouqueça agora!
Publicado originalmente em: Ativação da API remota do Docker na máquina do Docker no Mac OS X