El demonio Docker proporciona un API REST remota. El cliente utiliza esta API para comunicarse con el motor. Esta API también puede ser invocada por otras herramientas, tales como rizo o Cliente REST Postman para Chrome.
Si está creando demonios Docker utilizando Docker Machine en OSX Mavericks, entonces conseguir que esta API funcione es un poco complicado. Este blog explicará cómo habilitar la API remota de Docker en máquinas Docker creadas en Mac OS X.
Conexión al puerto seguro de Docker mediante curl da el comando como:
|
1 2 3 4 |
$ curl https://$HOST:2376/images/json --cert ~/.docker/cert.pem --key ~/.docker/key.pem --cacert ~/.docker/ca.pem |
Un par de problemas con este comando:
- Este comando ni siquiera funciona para Docker Machine ya que los certificados para cada máquina se almacenan en
.docker/máquina/máquinas/directorio. - Incluso si este comando se modifica para que coincida con esa ruta:
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
Sigue dando el siguiente error:
1curl: (58) SSL: Can't load the certificate "/Users/arungupta/.docker/machine/machines/couchbase/cert.pem" and its private key: OSStatus -25299
El culpable de esto es un utilidad curl actualizada para usuarios de OSX Mavericks. En resumen, la nueva versión de CURL utiliza la API de transporte seguro de Apple en lugar de la API OpenSSL. Esto significa que los certificados tienen que estar en formato P12.
¡Arreglémoslo!
- Vaya al directorio donde se almacenan los certificados para su Máquina. En mi caso, es
.docker/máquina/máquinas/couchbasedirectorio. - Genere
*.p12para el certificado:
12345678openssl pkcs12 -export-inkey key.pem-in cert.pem-CAfile ca.pem-chain-name client-side-out cert.p12-password pass:mypass - Ahora invoque la 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,--certahora apunta al certificado p12 generado y se especifica la contraseña del certificado sing--pass.Esto devolverá el resultado como:
1[{"Id":"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a","ParentId":"","RepoTags":["arungupta/couchbase:latest"],"RepoDigests":null,"Created":1450330075,"Size":374824677,"VirtualSize":374824677,"Labels":{}}]¡Vale, ahora tiene sentido!
- Intentemos empezar Servidor Couchbase como:
12~ > docker run -d -p 8091-8093:8091-8093 -p 11210:11210 arungupta/couchbase42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e
E invocar otra API REST para ver más detalles sobre este contenedor:
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"}}}}]
Lea el API completa ¡y vuélvete loco ahora!
Publicado originalmente en: Activación de la API remota de Docker en una máquina Docker en Mac OS X