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 |
$ rizo https://$HOST:2376/images/json --cert ~/.docker/cert.pem --clave ~/.docker/clave.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:
1rizo 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:
1rizo: (58) SSL: Puede't carga el certificado "/Usuarios/arungupta/.docker/máquina/máquinas/couchbase/cert.pem" y su privado clave: 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 -exportar-inkey clave.pem-en cert.pem-CAfile ca.pem-cadena-nombre cliente-lateral-fuera cert.p12-contraseña pase:mypass - Ahora invoque la API REST como:
1rizo 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,"Creado":1450330075,"Tamaño":374824677,"TamañoVirtual":374824677,"Etiquetas":{}}]¡Vale, ahora tiene sentido!
- Intentemos empezar Servidor Couchbase como:
12~ > docker ejecute -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~ > rizo 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","Nombres":["/admiring_pike"],"Imagen":"arungupta/couchbase","ImageID":"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a","Comando":"/entrypoint.sh /opt/couchbase/configure-cluster.sh","Creado":1454850194,"Puertos":[{"IP":"0.0.0.0","PuertoPrivado":8092,"PuertoPúblico":8092,"Tipo":"tcp"},{"PuertoPrivado":11207,"Tipo":"tcp"},{"IP":"0.0.0.0","PuertoPrivado":11210,"PuertoPúblico":11210,"Tipo":"tcp"},{"PuertoPrivado":18092,"Tipo":"tcp"},{"PuertoPrivado":18091,"Tipo":"tcp"},{"IP":"0.0.0.0","PuertoPrivado":8093,"PuertoPúblico":8093,"Tipo":"tcp"},{"IP":"0.0.0.0","PuertoPrivado":8091,"PuertoPúblico":8091,"Tipo":"tcp"},{"PuertoPrivado":11211,"Tipo":"tcp"}],"Etiquetas":{},"Estado":"Arriba 2 segundos","HostConfig":{"ModoRed":"por defecto"},"ConfiguraciónDeRed":{"Redes:{"puente":{"IPAMConfig":null,"Enlaces:null,"Alias":null,"NetworkID":"","EndpointID":"6feaf4c1c70feaf0ba240ce55fb58ce83ebb84c8098bef9171998e84f607fa0b","Pasarela":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"Pasarela IPv6":"","DirecciónIPv6Global":"","GlobalIPv6PrefixLen":0,"MacDirección":"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