如何将 `docker network create` CLI 选项转换为 `docker stack deploy` 使用的组合格式?

How do I translate the `docker network create` CLI options into compose format for `docker stack deploy` use?

用例上下文: 我需要通过 docker run 进行一些批处理,使用群覆盖网络连接到服务。 我想使用 docker stack deploy 来部署网络和服务设置; 单个容器任务假脱机是直接通过 REST API.

完成的

因此,我想根据 docker-compose.yml 版本 3+ 文件来表达以下 shell 命令。

$ docker network create \
    --driver overlay \
    --opt encrypted \
    --internal \
    --attachable \
    --subnet 10.42.6.0/24 \
    example_net

检查此网络可以详细了解如何解释参数。

$ docker network inspect example_net

[{
  "Name": "example_net",
  "Id": "lw689m2su19p5imljtlfsfsxy",
  "Created": "0001-01-01T00:00:00Z",
  "Scope": "swarm",
  "Driver": "overlay",
  "EnableIPv6": false,
  "IPAM": {
      "Driver": "default",
      "Options": null,
      "Config": [
          {
              "Subnet": "10.42.6.0/24",
              "Gateway": "10.42.6.1"
          }
      ]
  },
  "Internal": true,
  "Attachable": true,
  "Containers": null,
  "Options": {
      "com.docker.network.driver.overlay.vxlanid_list": "4098",
      "encrypted": ""
  },
  "Labels": null
}]

将这些检查结果转化为我在 docker-compose.yml 的第一次剪辑:

version: "3.1"
networks:
  example_net:
    internal: true
    driver_opts:
      encrypted: ""
    ipam:
      config:
        - subnet: 172.16.4.0/24

services:
  db:
    image: couchdb
    networks:
      - example_net
    hostname: "{{.Service.Name}}-{{.Task.Slot}}-{{.Node.ID}}"

…接近配置结果:

$ docker stack deploy -c ./docker-compose.yml test

Creating network test_example_net
Creating service test_db

$ docker network inspect example_net

[{
  "Name": "test_example_net",
  "Id": "j1ahedyfh05mpg5g52vrd9034",
  "Created": "2017-04-21T21:00:55.656972306Z",
  "Scope": "swarm",
  "Driver": "overlay",
  "EnableIPv6": false,
  "IPAM": {
      "Driver": "default",
      "Options": null,
      "Config": [
          {
              "Subnet": "172.16.4.0/24",
              "Gateway": "172.16.4.1"
          }
      ]
  },
  "Internal": true,
  "Attachable": false,
  "Containers": { ...  },
  "Options": {
      "com.docker.network.driver.overlay.vxlanid_list": "4100",
      "encrypted": ""
  },
  "Labels": {"com.docker.stack.namespace": "test"},
  "Peers": [ ... ]
}]

问题:有没有办法用docker stack deploy命令设置"Attachable": true

"attachable property not supported in docker-compose v3 format" 有一个 github 问题。

This was added in #30742. It will be in Compose file v3.2 format in the next release.

所以这应该在 Compose 的 1.12 版本中并且可能需要 Docker 的 17+ 版本才能用于 docker stack