Docker Python API Update 方法生成 TypeError: unhashable type: 'dict'

时间:2021-07-03 09:49:48

标签: python docker typeerror

Docker SDK for Python 记录了 Container 对象类“container”支持“update”方法,在文档中描述如下:


更新(**kwargs)
更新容器的资源配置。

参数:
blkio_weight (int) – 块 IO(相对权重),在 10 到 1000 之间
cpu_period (int) – 限制 CPU CFS(完全公平调度程序)周期
cpu_quota (int) – 限制 CPU CFS(完全公平调度程序)配额
cpu_shares (int) – CPU 份额(相对权重)
cpuset_cpus (str) – 允许执行的 CPU
cpuset_mems (str) – 允许执行的 MEM
mem_limit (int or str) – 内存限制
mem_reservation (int or str) – 内存软限制
memswap_limit (int or str) – 总内存(内存 + 交换),-1 禁用交换
kernel_memory (int or str) – 内核内存限制

restart_policy (dict) – 重启策略字典

  • 当容器退出时重新启动容器。配置为带键的字典:

    • 名称:失败或总是失败之一。
    • MaximumRetryCount:失败时重新启动容器的次数。
    • 例如:{"Name": "on-failure", "MaximumRetryCount": 5}

reference in docker python api doc

尝试使用时:

client = docker.from_env()
for container in client.containers.list():
    restart_policy = {'restart_policy',{'MaximumRetryCount': 4, 'Name': 'on-failure'}}
    container.update(restart_policy)

我遇到错误:

restart_policy = {'restart_policy',{'MaximumRetryCount': 4, 'Name': 'on-failure'}}
TypeError: unhashable type: 'dict'

请提供有关如何制定请求的指导!

1 个答案:

答案 0 :(得分:0)

您应该在函数调用中将该参数作为命名参数传递:

array:2 [▼
0 => array:11 [▼
"id" => 1
"active" => 1
"name" => "Foo"
"child" => array:3 [▼
  0 => array:3 [▼
    "id" => 1
    "parent_id" => 1
    "name" => "S/M"
  ]
  1 => array:3 [▼
    "id" => 2
    "parent_id" => 1
    "name" => "L/XL"
  ]
  2 => array:3 [▼
    "id" => 3
    "parent_id" => 1
    "name" => "2XL"
  ]
]

如果出于某种原因需要将其作为单独的字典,则需要使用 container.update(restart_policy={'Name': 'on-failure', 'MaximumRetryCount': 4}) 语法传递该字典:

**kwargs

使用逗号而不是冒号,kwargs = { 'restart_policy': { 'Name': 'on-failure', 'MaximumRetryCount': 4 } } container.update(**kwargs) 创建一个 Python {a, b},其中 set 创建一个 {'a': b}。如果没有 dict** 将字典作为位置参数传递,其中 function(args) 扩展字典以传递命名参数。