Moby: API tidak mengembalikan apa pun ketika saya menginginkan statistik penampung

Dibuat pada 4 Sep 2015  ·  3Komentar  ·  Sumber: moby/moby

Halo, saya punya masalah dengan Docker API, tapi pertama-tama:

$ 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

Saya menggunakan API dengan baris perintah, dan ketika saya ingin mendapatkan statistik penampung, API tidak mengembalikan apa pun:

$ 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

Dengan perintah "docker" saya bisa mendapatkan statistik, tetapi saya benar-benar perlu menggunakan 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

Namun API berfungsi ...

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"
}

Tolong, apa yang saya lakukan salah? Terima kasih!

Komentar yang paling membantu

Saya pikir ini adalah masalah 'nc'. Coba: ... nc -q -1 -U /var/run/docker.sock (perhatikan "-q -1").

Saya percaya 'nc' menutup permintaan http sebelum server melakukan tugasnya dan sebagai hasilnya kami menghentikan pemrosesan 'statistik'. Jika Anda mencoba cmd buruh pelabuhan lain yang tidak memeriksa permintaan http, Anda akan melihat bahwa itu berfungsi.

Akan menutup ini karena ini bukan masalah buruh pelabuhan melainkan masalah nc. Bisakah Anda menggunakan curl sebagai gantinya?

Semua 3 komentar

Ini kemungkinan terjadi karena buruh pelabuhan mengirim tajuk respons terlebih dahulu ...
Perhatikan bahwa saya tidak dapat mengulangi ini dengan curl, hanya dengan perpipaan ke nc seperti yang Anda miliki di sini.
Juga CLI menggunakan API yang sama persis.

Saya pikir ini adalah masalah 'nc'. Coba: ... nc -q -1 -U /var/run/docker.sock (perhatikan "-q -1").

Saya percaya 'nc' menutup permintaan http sebelum server melakukan tugasnya dan sebagai hasilnya kami menghentikan pemrosesan 'statistik'. Jika Anda mencoba cmd buruh pelabuhan lain yang tidak memeriksa permintaan http, Anda akan melihat bahwa itu berfungsi.

Akan menutup ini karena ini bukan masalah buruh pelabuhan melainkan masalah nc. Bisakah Anda menggunakan curl sebagai gantinya?

Terima kasih, itu berhasil! tetapi saya lebih suka mengatur -q ke 5 (karena -1 adalah untuk menunggu selamanya) dan 5 akan mengatur batas waktu menjadi 5 detik.

Saya dapat menggunakan curl sebagai gantinya di Debian Stretch tetapi tidak di Ubuntu 14.04 karena: curl: option --unix-socket: is unknown

Apakah halaman ini membantu?
0 / 5 - 0 peringkat