Trovare il contenitore docker ip / port in modo programmato

Ho bisogno di scoprire (programmaticamente) i container ip e porte di una particolare applicazione che ho distribuito in Docker. L'applicazione potrebbe essere eseguita in più nodes e ridimensionata.

C'è un modo per utilizzare l'API Docker per scoprire i pacchetti e le porte dei container?

Utilizzare l'SDK Docker. Basta scegliere la lingua …;)

https://docs.docker.com/engine/api/sdks/

L' API Docker fornisce gli endpoint HTTP per tutte le operazioni in modo da poter essere gestito facilmente nella maggior parte delle lingue .

Un semplice esempio è quello di usare curl e jq sulla row di command.

È ansible elencare tutte le porte dei container

 $ curl -s --unix-socket /var/run/docker.sock \ http:/v1.26/containers/json \ | jq '.[] | .Id, .Ports' "b8249afa78bcc8027a38048384c7656a305a3c8d5a517d52df5a299223d8064d" [ { "IP": "0.0.0.0", "PrivatePort": 3142, "PublicPort": 3142, "Type": "tcp" } ] "49125f8274242a5ae244ffbca121f354c620355186875617d43876bcde619732" [ { "IP": "0.0.0.0", "PrivatePort": 4873, "PublicPort": 4873, "Type": "tcp" } ] 

Recuperare l'elenco delle definizioni della mappa port per un contenitore specifico

 $ curl -s --unix-socket /var/run/docker.sock \ http:/v1.26/containers/49125f8274242a5ae244ffbca121f354c620355186875617d43876bcde619732/json \ | jq '.NetworkSettings | .Ports | keys' [ "4873/tcp" ]