Il existe une librairie
psutil
docker exec -it my-container poetry run python -c 'import psutil;print(f"{psutil.cpu_freq().current} MHz")'
Et pour la mémoire consommée
docker exec -it my-container poetry run python -c 'import psutil;print(f"{psutil.virtual_memory().active / 1000 / 1000} Mo")'
Cependant les informations collecter ne sont pas correctes, car par défaut cette lib connecte la récupération des infos sur
/proc
PROCFS_PATH
Docker utilises cgroups pour mettre en place des limitations de ressource et isoler le processus par rapport aux autres. On retrouve ces informations dans
/sys/fs/cgroup
Les outils comme
top
/proc
psutil
/proc
L'approche cgroup et
/proc
psutils
PROCFS_PATH
Sinon il est possible d'accéder à ces informations avec les commandes docker
Copier le code
1 2 3 docker stats my-container CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 3d68c2bfc68f my-container 0.28% 88.38MiB / 128MiB 69.04% 220kB / 80.8kB 29.7MB / 15.2MB 13
Ou alors pour extraire uniquement la mémoire utilisée sans mise à jour temps réel de l'information
Copier le code
1 docker stats --no-stream --format "{{.MemUsage}}" my-container
Si on souhaite l'extraire depuis l'API docker il suffit d'installer la librairie
docker
Copier le code
1 2 3 4 5 6 7 import docker import pprint client = docker.DockerClient(base_url='unix:///home/david/.docker/desktop/docker.sock') for containers in client.containers.list(): results = containers.stats(decode=None, stream=False) pprint.pprint(results) # Plenty of data print(f'{round(results["memory_stats"]["usage"] / 1000 / 1000)} Mo') # 157 Mo
En résumé, n'utilisez pas
psutils
docker
docker stats