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 |
$ curl https://$HOST:2376/images/json --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/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:
1curl 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:
1curl: (58) SSL: Can't load the certificate "/Users/arungupta/.docker/machine/machines/couchbase/cert.pem" and its private key: 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/couchbasediretório. - Gerar
*.p12formato para o certificado:
12345678openssl pkcs12 -export-inkey key.pem-in cert.pem-CAfile ca.pem-chain-name client-side-out cert.p12-password pass:mypass - Agora, invoque a API REST como:
1curl 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,--certagora 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":null,"Created":1450330075,"Size":374824677,"VirtualSize":374824677,"Labels":{}}]OK, agora isso faz sentido!
- Vamos tentar começar Servidor Couchbase como:
12~ > docker run -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~ > curl 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","Names":["/admiring_pike"],"Image":"arungupta/couchbase","ImageID":"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a","Command":"/entrypoint.sh /opt/couchbase/configure-cluster.sh","Created":1454850194,"Ports":[{"IP":"0.0.0.0","PrivatePort":8092,"PublicPort":8092,"Type":"tcp"},{"PrivatePort":11207,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":11210,"PublicPort":11210,"Type":"tcp"},{"PrivatePort":18092,"Type":"tcp"},{"PrivatePort":18091,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":8093,"PublicPort":8093,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":8091,"PublicPort":8091,"Type":"tcp"},{"PrivatePort":11211,"Type":"tcp"}],"Labels":{},"Status":"Up 2 seconds","HostConfig":{"NetworkMode":"default"},"NetworkSettings":{"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"","EndpointID":"6feaf4c1c70feaf0ba240ce55fb58ce83ebb84c8098bef9171998e84f607fa0b","Gateway":"172.17.0.1","IPAddress":"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