首页 > 解决方案 > 如何在 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

解决方案


我使用 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": {}
  }
}

推荐阅读