package client import ( "context" "encoding/json" "github.com/moby/moby/api/types/network" ) // NetworkCreateOptions holds options to create a network. type NetworkCreateOptions struct { Driver string // Driver is the driver-name used to create the network (e.g. `bridge`, `overlay`) Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level). EnableIPv4 *bool // EnableIPv4 represents whether to enable IPv4. EnableIPv6 *bool // EnableIPv6 represents whether to enable IPv6. IPAM *network.IPAM // IPAM is the network's IP Address Management. Internal bool // Internal represents if the network is used internal only. Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode. Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster. ConfigOnly bool // ConfigOnly creates a config-only network. Config-only networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services. ConfigFrom string // ConfigFrom specifies the source which will provide the configuration for this network. The specified network must be a config-only network; see [CreateOptions.ConfigOnly]. Options map[string]string // Options specifies the network-specific options to use for when creating the network. Labels map[string]string // Labels holds metadata specific to the network being created. } // NetworkCreateResult represents the result of a network create operation. type NetworkCreateResult struct { ID string Warning []string } // NetworkCreate creates a new network in the docker host. func (cli *Client) NetworkCreate(ctx context.Context, name string, options NetworkCreateOptions) (NetworkCreateResult, error) { req := network.CreateRequest{ Name: name, Driver: options.Driver, Scope: options.Scope, EnableIPv4: options.EnableIPv4, EnableIPv6: options.EnableIPv6, IPAM: options.IPAM, Internal: options.Internal, Attachable: options.Attachable, Ingress: options.Ingress, ConfigOnly: options.ConfigOnly, Options: options.Options, Labels: options.Labels, } if options.ConfigFrom != "" { req.ConfigFrom = &network.ConfigReference{Network: options.ConfigFrom} } resp, err := cli.post(ctx, "/networks/create", nil, req, nil) defer ensureReaderClosed(resp) if err != nil { return NetworkCreateResult{}, err } var response network.CreateResponse err = json.NewDecoder(resp.Body).Decode(&response) var warnings []string if response.Warning != "" { warnings = []string{response.Warning} } return NetworkCreateResult{ID: response.ID, Warning: warnings}, err }