مرحبًا ، لدي مشكلة في Docker API ، ولكن أولاً:
$ 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
أنا أستخدم واجهة برمجة التطبيقات مع سطر الأوامر ، وعندما أرغب في الحصول على إحصائيات الحاوية ، لا تُرجع واجهة برمجة التطبيقات أي شيء:
$ 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
باستخدام الأمر "docker" ، يمكنني الحصول على الإحصائيات ، لكني أحتاج حقًا إلى استخدام واجهة برمجة التطبيقات:
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
ومع ذلك تعمل API ...
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"
}
ما الخطأ الذي أفعله من فضلك؟ شكرا لك!
من المحتمل أن يحدث هذا لأن عامل الإرساء يرسل رأس الاستجابة أولاً ...
لاحظ أنه لا يمكنني إعادة عرض هذا باستخدام curl ، فقط باستخدام الأنابيب إلى nc كما هو الحال هنا.
كما يستخدم CLI نفس واجهة برمجة التطبيقات بالضبط.
أعتقد أن هذه قضية "nc". جرب: ... nc -q -1 -U /var/run/docker.sock
(لاحظ "-q -1").
أعتقد أن "nc" يغلق طلب http قبل أن يقوم الخادم بعمله ونتيجة لذلك نتوقف عن معالجة "الإحصائيات". إذا جربت أوامر cmds الأخرى لوظيفة Docker التي لا تتحقق من طلب http ، فيجب أن ترى أنها تعمل.
سأغلق هذا لأنه ليس في الحقيقة مشكلة عامل ميناء بقدر ما هو مشكلة nc. هل يمكنك استخدام curl بدلاً من ذلك؟
شكرا لك ، إنها تعمل! لكني أفضل تعيين -q إلى 5 (لأن -1 هو انتظار إلى الأبد) و 5 سيضبط مهلة على 5 ثوانٍ.
يمكنني استخدام curl بدلاً من ذلك على Debian Stretch ولكن ليس في Ubuntu 14.04 للأسباب التالية: curl: option --unix-socket: is unknown
التعليق الأكثر فائدة
أعتقد أن هذه قضية "nc". جرب:
... nc -q -1 -U /var/run/docker.sock
(لاحظ "-q -1").أعتقد أن "nc" يغلق طلب http قبل أن يقوم الخادم بعمله ونتيجة لذلك نتوقف عن معالجة "الإحصائيات". إذا جربت أوامر cmds الأخرى لوظيفة Docker التي لا تتحقق من طلب http ، فيجب أن ترى أنها تعمل.
سأغلق هذا لأنه ليس في الحقيقة مشكلة عامل ميناء بقدر ما هو مشكلة nc. هل يمكنك استخدام curl بدلاً من ذلك؟