docker - 如何在 Docker API 中使用挂载创建容器
问题描述
目前使用 Docker API 的 1.37v 创建带有挂载的容器的方法是什么:
https://docs.docker.com/engine/api/v1.37/#operation/ContainerCreate
以下失败:
{
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"Env": [
"string"
],
"Cmd": [
"ls"
],
"WorkingDir": "/wix-fed-scripts",
"Labels": {
"stav": true
},
"Image": "stavalfi/node7",
// Addint this secion cause error
"Volumes": {
"Source": "/folder1",
"Target": "/folder2",
"Type": "bind",
"ReadOnly": false
}
}
错误:(HTTP 代码 500)服务器错误 - json:无法将字符串解组到 Go 结构字段 ContainerConfigWrapper.Volumes 类型的 struct {}
解决方案
我使用 docker 客户端的代理来监视 REST 请求。
要创建具有匿名卷的容器,请使用该Volumes
字段
docker run -v /temp ubuntu
JSON 字段:
"Volumes": {
"temp": {}
},
要创建主机卷,请使用该HostConfig
字段
docker run -v /path_on_host:/path_in_container ubuntu
HostConfig
领域:
"HostConfig": {
"Binds": [
"/path_on_host:/path_in_container"
],
...
}
对于命名卷
docker run -v name:/path/in/container ubuntu
JSON:
"HostConfig": {
"Binds": [
"name:/path/in/container"
],
...
}
/v1.37/containers/create
可以缩减的匿名卷的完整 POST 请求 JSON :
{
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [],
"Cmd": null,
"Image": "ubuntu",
"Volumes": {
"temp": {}
},
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {},
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 0,
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"NetworkingConfig": {
"EndpointsConfig": {}
}
}
推荐阅读
- python-3.6 - 为 python3 构建张量流/服务失败
- tableau-api - 将 Tableau 筛选器与地图一起使用 - 始终包含一个值,但将其从筛选器中排除
- javascript - Node/Webpack/javascript es6 - 在 Object.Assign() 内的要求上添加条件
- c++ - 如何使用条件变量使睡眠线程不会错过唤醒呼叫?
- python - 在Django的查询集中总结一个字段
- arrays - 如何选择除索引列表之外的矩阵行
- python - flask restplus 将文件保存到来自 API 的数据库中
- git - 将新文件推送到现有的 git 存储库
- jquery - 有没有人用 Materialize Framework 激活 2 个或多个下拉菜单的解决方法?
- ios - 如何从钥匙串中获取 NEPacketTunnelProvider Networkextension 的身份?