用于使用远程API创builddocker容器的Python脚本

我正在尝试使用Python脚本来创buildDocker容器和Docker Remote API来完成Post操作。 这是我的Python脚本: –

import requests import json url = "http://localhost:4243/containers/create" payload = {'Hostname':'','User':'','Memory':'0','MemorySwap':'0','AttachStdin':'false','AttachStdout':'t rue','AttachStderr':'true','PortSpecs':'null','Privileged': 'false','Tty':'false','OpenStdin':'false','StdinOnce':'false','Env':'null','Cmd':['date'],'Dns':'null','Image':'ubuntu','Volumes':{},'VolumesFrom':'','WorkingDir':''} headers = {'content-type': 'application/json', 'Accept': 'text/plain'} print requests.post(url, data = json.dumps(payload), headers=headers).text 

但是当我运行脚本时,它显示了这个错误

 json: cannot unmarshal string into Go value of type bool 

我的脚本有什么问题? 我使用Python v2.7.5和Ubuntu 13.10的Requests HTTP库。 我是新来的docker和Python脚本。 任何帮助,将不胜感激。

正如在评论中指出的,你没有使用正确的types。

特别:

  • 布尔值必须是TrueFalse ,而不是"true""false"
  • DnsEnvPortSpecs必须是None而不是"null"
  • MemoryMemorySwap必须为0而不是"0"

您可以在create命令的API文档中看到所有的types定义。

这是一个可用的有效载荷:

 payload={ 'AttachStderr': True, 'AttachStdin': False, 'AttachStdout': True, 'Cmd': ['date'], 'Dns': None, 'Env': None, 'Hostname': '', 'Image': 'ubuntu', 'Memory': 0, 'MemorySwap': 0, 'OpenStdin': False, 'PortSpecs': None, 'Privileged': False, 'StdinOnce': False, 'Tty': False, 'User': '', 'Volumes': {}, 'VolumesFrom': '', 'WorkingDir': '', } 

但是,不知何故,如果parsing器可以确切地知道哪个字段不能被parsing,那将是很好的:-)