Skip to main content
 首页 » 编程设计

python之如何使用 docker Docker SDK for Python 获取容器大小

2024年09月03日32yxwkf

可以通过运行查看容器大小:docker ps -s或通过 docker inspect -s <container_id> .

我想对 Docker SDK for Python 做同样的事情.

要获取我运行的第一个容器的所有详细信息:

import docker 
client = docker.from_env() 
containers = client.containers.list() 
print(containers[0].id)   
client_api = docker.APIClient(base_url='unix://var/run/docker.sock') 
client_api.inspect_container(containers[0]) 

我正在获取包含所有容器信息的列表,但只缺少大小:

{ 
  'HostnamePath': '/var/lib/docker/containers/dd418d37b0ea82b8ec32b5619ce77b6d897c8a847a575c3ed21c4ddd20d06b3e/hostname', 
  'Mounts': [], 
  'HostsPath': '/var/lib/docker/containers/dd418d37b0ea82b8ec32b5619ce77b6d897c8a847a575c3ed21c4ddd20d06b3e/hosts', 
  'MountLabel': '', 
  'AppArmorProfile': 'docker-default', 
  'ExecIDs': None, 
  'Path': 'sh', 
  'GraphDriver': { 
    'Data': None, 
    'Name': 'aufs' 
  }, 
  'Image': 'sha256:caf27325b298a6730837023a8a342699c8b7b388b8d878966b064a1320043019', 
  'Name': '/jovial_wiles', 
  'ResolvConfPath': '/var/lib/docker/containers/dd418d37b0ea82b8ec32b5619ce77b6d897c8a847a575c3ed21c4ddd20d06b3e/resolv.conf', 
  'Args': ['-c', 'sleep 1111111'], 
  'NetworkSettings': { 
    'Networks': { 
      'bridge': { 
        'Links': None, 
        'EndpointID': '2fb132d452ef55076296360a41aa06bbd03e128860ac56d9ead773e94bd09f25', 
        'MacAddress': '02:42:ac:11:00:03', 
        'Gateway': '172.17.0.1', 
        'IPAddress': '172.17.0.3', 
        'GlobalIPv6PrefixLen': 0, 
        'NetworkID': '3da3f680f6a93df9a27948669c9174304f69d1e649702568b909e8cbb4a1ddcf', 
        'IPv6Gateway': '', 
        'IPPrefixLen': 16, 
        'IPAMConfig': None, 
        'DriverOpts': None, 
        'GlobalIPv6Address': '', 
        'Aliases': None 
      } 
    }, 
    'SandboxKey': '/var/run/docker/netns/9a764461f582', 
    'EndpointID': '2fb132d452ef55076296360a41aa06bbd03e128860ac56d9ead773e94bd09f25', 
    'MacAddress': '02:42:ac:11:00:03', 
    'Gateway': '172.17.0.1', 
    'SecondaryIPAddresses': None, 
    'GlobalIPv6PrefixLen': 0, 
    'SandboxID': '9a764461f58297f4fbaf692773a917430cc66eefdb9e76921da1da2faacc7997', 
    'Ports': {}, 
    'IPAddress': '172.17.0.3', 
    'LinkLocalIPv6PrefixLen': 0, 
    'Bridge': '', 
    'IPv6Gateway': '', 
    'SecondaryIPv6Addresses': None, 
    'IPPrefixLen': 16, 
    'HairpinMode': False, 
    'LinkLocalIPv6Address': '', 
    'GlobalIPv6Address': '' 
  }, 
  'Platform': 'linux', 
  'State': { 
    'Pid': 33888, 
    'ExitCode': 0, 
    'Dead': False, 
    'OOMKilled': False, 
    'Error': '', 
    'StartedAt': '2019-03-14T09:09:30.488548343Z', 
    'Restarting': False, 
    'FinishedAt': '0001-01-01T00:00:00Z', 
    'Status': 'running', 
    'Paused': False, 
    'Running': True 
  }, 
  'LogPath': '/var/lib/docker/containers/dd418d37b0ea82b8ec32b5619ce77b6d897c8a847a575c3ed21c4ddd20d06b3e/dd418d37b0ea82b8ec32b5619ce77b6d897c8a847a575c3ed21c4ddd20d06b3e-json.log', 
  'Driver': 'aufs', 
  'Config': { 
    'OnBuild': None, 
    'Env': ['PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'], 
    'Entrypoint': None, 
    'StdinOnce': False, 
    'Tty': False, 
    'AttachStdout': False, 
    'Domainname': '', 
    'Labels': {}, 
    'Cmd': ['sh', '-c', 'sleep 1111111'], 
    'User': '', 
    'AttachStdin': False, 
    'WorkingDir': '', 
    'Hostname': 'dd418d37b0ea', 
    'OpenStdin': False, 
    'AttachStderr': False, 
    'Image': 'alpine', 
    'Volumes': None 
  }, 
  'Id': 'dd418d37b0ea82b8ec32b5619ce77b6d897c8a847a575c3ed21c4ddd20d06b3e', 
  'Created': '2019-03-14T09:09:29.746351911Z', 
  'ProcessLabel': '', 
  'RestartCount': 0, 
  'HostConfig': { 
    'Links': None, 
    'IOMaximumIOps': 0, 
    'Cgroup': '', 
    'IOMaximumBandwidth': 0, 
    'Ulimits': None, 
    'CpusetMems': '', 
    'CpuQuota': 0, 
    'BlkioDeviceReadIOps': None, 
    'BlkioWeightDevice': [], 
    'UTSMode': '', 
    'BlkioDeviceWriteIOps': None, 
    'Devices': [], 
    'CgroupParent': '', 
    'VolumesFrom': None, 
    'CpuShares': 0, 
    'ContainerIDFile': '', 
    'MaskedPaths': ['/proc/acpi', '/proc/kcore', '/proc/keys', '/proc/latency_stats', '/proc/timer_list', '/proc/timer_stats', '/proc/sched_debug', '/proc/scsi', '/sys/firmware'], 
    'BlkioDeviceWriteBps': None, 
    'NanoCpus': 0, 
    'UsernsMode': '', 
    'OomScoreAdj': 0, 
    'ReadonlyPaths': ['/proc/asound', '/proc/bus', '/proc/fs', '/proc/irq', '/proc/sys', '/proc/sysrq-trigger'], 
    'CpuPercent': 0, 
    'DeviceCgroupRules': None, 
    'Privileged': False, 
    'MemorySwappiness': None, 
    'ExtraHosts': None, 
    'PidsLimit': 0, 
    'PidMode': '', 
    'IpcMode': 'shareable', 
    'NetworkMode': 'default', 
    'CapAdd': None, 
    'MemoryReservation': 0, 
    'AutoRemove': True, 
    'Memory': 0, 
    'GroupAdd': None, 
    'ReadonlyRootfs': False, 
    'DiskQuota': 0, 
    'BlkioWeight': 0, 
    'SecurityOpt': None, 
    'PublishAllPorts': False, 
    'ShmSize': 67108864, 
    'CpuPeriod': 0, 
    'MemorySwap': 0, 
    'LogConfig': { 
      'Config': {}, 
      'Type': 'json-file' 
    }, 
    'CpuRealtimePeriod': 0, 
    'PortBindings': {}, 
    'RestartPolicy': { 
      'Name': 'no', 
      'MaximumRetryCount': 0 
    }, 
    'VolumeDriver': '', 
    'CpusetCpus': '', 
    'Isolation': '', 
    'DnsSearch': [], 
    'DnsOptions': [], 
    'ConsoleSize': [0, 0], 
    'Runtime': 'runc', 
    'Dns': [], 
    'CapDrop': None, 
    'KernelMemory': 0, 
    'Binds': None, 
    'CpuCount': 0, 
    'OomKillDisable': False, 
    'CpuRealtimeRuntime': 0, 
    'BlkioDeviceReadBps': None 
  } 

当我运行 docker inspect -s <container_id> | grep size我看到它出现在名为 SizeRw 的字段中但是我在上面的信息上找不到。

请您参考如下方法:

此信息来自守护进程,因此我需要运行以下代码:

info = client_api.df() 
for container in info['Containers']: 
    if 'SizeRw' in container: 
        print(container['SizeRw'])