1

我正在尝试使用 Python 脚本使用 Docker Remote API 创建一个 Docker 容器来执行 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 脚本的新手。任何帮助,将不胜感激。

4

1 回答 1

3

正如评论中所指出的,您没有使用正确的类型。

具体来说:

  • 布尔值必须是Trueor False,而不是"true"or"false"
  • Dns, Env, 并且PortSpecs必须None代替"null"
  • Memory并且MemorySwap必须0代替"0"

您可以在API 文档中查看 create 命令的所有类型定义。

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

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': '',
}

但不知何故,如果解析器能够准确地知道哪个字段无法解析,那就太好了:-)

于 2013-10-08T15:27:32.720 回答