Moby: La API no devuelve nada cuando quiero las estadísticas del contenedor

Creado en 4 sept. 2015  ·  3Comentarios  ·  Fuente: moby/moby

Hola, tengo un problema con la API de Docker, pero antes:

$ docker version
Client:
 Version:      1.8.2-rc1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   28220ac
 Built:        Thu Sep  3 19:07:51 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.8.2-rc1
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   28220ac
 Built:        Thu Sep  3 19:07:51 UTC 2015
 OS/Arch:      linux/amd64

$ docker info   
Containers: 17
Images: 8
Storage Driver: devicemapper
 Pool Name: docker-254:0-1512633-pool
 Pool Blocksize: 65.54 kB
 Backing Filesystem: extfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 3.557 GB
 Data Space Total: 107.4 GB
 Data Space Available: 8.216 GB
 Metadata Space Used: 7.848 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.14 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.104 (2015-08-10)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 4.1.0-1-amd64
Operating System: Debian GNU/Linux stretch/sid
CPUs: 8
Total Memory: 15.65 GiB
Name: n-pc
ID: LWBS:FFUU:5FGD:UXXH:J5FB:G4WL:WUZM:RFS4:3TEC:3IGG:K7GU:YWBV
WARNING: No memory limit support
WARNING: No swap limit support

$ uname -a
Linux n-pc 4.1.0-1-amd64 #1 SMP Debian 4.1.3-1 (2015-08-03) x86_64 GNU/Linux

Estoy usando la API con la línea de comando, y cuando quiero obtener las estadísticas de un contenedor, la API no devuelve nada:

$ echo -e "GET /containers/57d3/stats?stream=0 HTTP/1.1\r\n" | nc -U /var/run/docker.sock 
HTTP/1.1 200 OK
Content-Type: application/json
Server: Docker/1.8.2-rc1 (linux)
Date: Fri, 04 Sep 2015 08:13:10 GMT
Content-Length: 0

Con el comando "docker" puedo obtener las estadísticas, pero realmente necesito usar la API:

docker stats --no-stream 57d3
CONTAINER           CPU %               MEM USAGE/LIMIT     MEM %               NET I/O
57d3                 1.16%               0 B/16.81 GB        0.00%               8.565 MB/1.499 MB

Sin embargo, la API está funcionando...

echo -e "GET /version HTTP/1.1\r\n" | nc -U /var/run/docker.sock | tail -1 | json
{
    "ApiVersion": "1.20",
    "Arch": "amd64",
    "BuildTime": "Thu Sep  3 19:07:51 UTC 2015",
    "GitCommit": "28220ac",
    "GoVersion": "go1.4.2",
    "KernelVersion": "4.1.0-1-amd64",
    "Os": "linux",
    "Version": "1.8.2-rc1"
}

¿Qué estoy haciendo mal, por favor? ¡Gracias!

Comentario más útil

Creo que este es un problema de 'nc'. Pruebe: ... nc -q -1 -U /var/run/docker.sock (observe el "-q -1").

Creo que 'nc' está cerrando la solicitud http antes de que el servidor haga su trabajo y, como resultado, detenemos el procesamiento de 'estadísticas'. Si prueba otros cmds docker que no verifican la solicitud http, debería ver que funciona.

Voy a cerrar esto porque no es realmente un problema de docker tanto como un problema de nc. ¿Puedes usar curl en su lugar?

Todos 3 comentarios

Es probable que esto suceda porque la ventana acoplable está enviando el encabezado de respuesta primero...
Tenga en cuenta que no puedo reproducir esto con curl, solo con tuberías a nc como tiene aquí.
Además, la CLI usa exactamente la misma API.

Creo que este es un problema de 'nc'. Pruebe: ... nc -q -1 -U /var/run/docker.sock (observe el "-q -1").

Creo que 'nc' está cerrando la solicitud http antes de que el servidor haga su trabajo y, como resultado, detenemos el procesamiento de 'estadísticas'. Si prueba otros cmds docker que no verifican la solicitud http, debería ver que funciona.

Voy a cerrar esto porque no es realmente un problema de docker tanto como un problema de nc. ¿Puedes usar curl en su lugar?

¡Gracias, funciona! pero prefiero establecer -q en 5 (porque -1 es para esperar para siempre) y 5 establecerá un tiempo de espera en 5 segundos.

Puedo usar curl en su lugar en Debian Stretch pero no en Ubuntu 14.04 porque: curl: option --unix-socket: is unknown

¿Fue útil esta página
0 / 5 - 0 calificaciones