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

标签 python docker

可以通过运行查看容器大小: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'])  

关于python - 如何使用 docker Docker SDK for Python 获取容器大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55158700/

相关文章:

python - Python如何传递多重继承的__init__参数

python - Seaborn 热图 : Customize A Label

python - 如何在同一部署的 pod 中运行的 python 代码中引用 openshift 部署中提到的环境变量

javascript - 陷入永恒循环

docker - 如何使用 docker swarm 保持粘性 session ( session 持久性)?

javascript - 带有 JavaScript 的 Python

python - 为什么 gevent spawn 没有像我想象的那样工作?

ruby-on-rails - 在 docker 的 ubuntu 镜像中运行网络服务器

docker - 如何永久更改Docker容器中的$ PATH

docker - 将壳放入 swarm 容器中