Moby: L'API ne renvoie rien quand je veux les statistiques du conteneur

Créé le 4 sept. 2015  ·  3Commentaires  ·  Source: moby/moby

Bonjour, j'ai un problème avec l'API Docker, mais d'abord :

$ 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

J'utilise l'API avec la ligne de commande et lorsque je souhaite obtenir les statistiques d'un conteneur, l'API ne renvoie rien :

$ 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

Avec la commande "docker", je peux obtenir les statistiques, mais j'ai vraiment besoin d'utiliser l'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

Cependant l'API fonctionne...

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'est-ce que je fais mal s'il vous plaît? Merci!

Commentaire le plus utile

Je pense que c'est un problème 'nc'. Essayez : ... nc -q -1 -U /var/run/docker.sock (notez le "-q -1").

Je crois que « nc » ferme la requête http avant que le serveur ne fasse son travail et, par conséquent, nous arrêtons le traitement « statistiques ». Si vous essayez d'autres cmds docker qui ne vérifient pas la requête http, vous devriez voir que cela fonctionne.

Je vais fermer ceci car ce n'est pas vraiment un problème de docker autant qu'un problème de nc. Pouvez-vous utiliser curl à la place ?

Tous les 3 commentaires

Cela se produit probablement parce que docker envoie d'abord l'en-tête de réponse...
Notez que je ne peux pas reproduire cela avec curl, uniquement avec la tuyauterie vers nc comme vous l'avez ici.
De plus, la CLI utilise exactement la même API.

Je pense que c'est un problème 'nc'. Essayez : ... nc -q -1 -U /var/run/docker.sock (notez le "-q -1").

Je crois que « nc » ferme la requête http avant que le serveur ne fasse son travail et, par conséquent, nous arrêtons le traitement « statistiques ». Si vous essayez d'autres cmds docker qui ne vérifient pas la requête http, vous devriez voir que cela fonctionne.

Je vais fermer ceci car ce n'est pas vraiment un problème de docker autant qu'un problème de nc. Pouvez-vous utiliser curl à la place ?

Merci, ça marche ! mais je préfère définir -q sur 5 (car -1 est pour attendre indéfiniment) et 5 définira un délai d'attente de 5 secondes.

Je peux utiliser curl à la place sur Debian Stretch mais pas dans Ubuntu 14.04 car : curl: option --unix-socket: is unknown

Cette page vous a été utile?
0 / 5 - 0 notes