func Convert(c *project.ServiceConfig) (*runconfig.Config, *runconfig.HostConfig, error) { vs := Filter(c.Volumes, isVolume) volumes := make(map[string]struct{}, len(vs)) for _, v := range vs { volumes[v] = struct{}{} } cmd, _ := shlex.Split(c.Command) entrypoint, _ := shlex.Split(c.Entrypoint) ports, binding, err := nat.ParsePortSpecs(c.Ports) if err != nil { return nil, nil, err } restart, err := runconfig.ParseRestartPolicy(c.Restart) if err != nil { return nil, nil, err } dns := c.Dns.Slice() dnssearch := c.DnsSearch.Slice() labels := c.Labels.MapParts() if len(c.Expose) > 0 { exposedPorts, _, err := nat.ParsePortSpecs(c.Expose) ports = exposedPorts if err != nil { return nil, nil, err } } config := &runconfig.Config{ Entrypoint: runconfig.NewEntrypoint(entrypoint...), Hostname: c.Hostname, Domainname: c.DomainName, User: c.User, Env: c.Environment.Slice(), Cmd: runconfig.NewCommand(cmd...), Image: c.Image, Labels: labels, ExposedPorts: ports, Tty: c.Tty, OpenStdin: c.StdinOpen, WorkingDir: c.WorkingDir, Volumes: volumes, } host_config := &runconfig.HostConfig{ VolumesFrom: c.VolumesFrom, CapAdd: c.CapAdd, CapDrop: c.CapDrop, CpuShares: c.CpuShares, Privileged: c.Privileged, Binds: Filter(c.Volumes, isBind), Dns: dns, DnsSearch: dnssearch, LogConfig: runconfig.LogConfig{ Type: c.LogDriver, }, Memory: c.MemLimit, NetworkMode: runconfig.NetworkMode(c.Net), ReadonlyRootfs: c.ReadOnly, PidMode: runconfig.PidMode(c.Pid), IpcMode: runconfig.IpcMode(c.Ipc), PortBindings: binding, RestartPolicy: restart, } return config, host_config, nil }
func Convert(c *project.ServiceConfig) (*runconfig.Config, *runconfig.HostConfig, error) { vs := Filter(c.Volumes, isVolume) volumes := make(map[string]struct{}, len(vs)) for _, v := range vs { volumes[v] = struct{}{} } ports, binding, err := nat.ParsePortSpecs(c.Ports) if err != nil { return nil, nil, err } restart, err := runconfig.ParseRestartPolicy(c.Restart) if err != nil { return nil, nil, err } if exposedPorts, _, err := nat.ParsePortSpecs(c.Expose); err != nil { return nil, nil, err } else { for k, v := range exposedPorts { ports[k] = v } } deviceMappings, err := parseDevices(c.Devices) if err != nil { return nil, nil, err } config := &runconfig.Config{ Entrypoint: runconfig.NewEntrypoint(c.Entrypoint.Slice()...), Hostname: c.Hostname, Domainname: c.DomainName, User: c.User, Env: c.Environment.Slice(), Cmd: runconfig.NewCommand(c.Command.Slice()...), Image: c.Image, Labels: c.Labels.MapParts(), ExposedPorts: ports, Tty: c.Tty, OpenStdin: c.StdinOpen, WorkingDir: c.WorkingDir, VolumeDriver: c.VolumeDriver, Volumes: volumes, } host_config := &runconfig.HostConfig{ VolumesFrom: c.VolumesFrom, CapAdd: runconfig.NewCapList(c.CapAdd), CapDrop: runconfig.NewCapList(c.CapDrop), CpuShares: c.CpuShares, CpusetCpus: c.CpuSet, ExtraHosts: c.ExtraHosts, Privileged: c.Privileged, Binds: Filter(c.Volumes, isBind), Devices: deviceMappings, Dns: c.Dns.Slice(), DnsSearch: c.DnsSearch.Slice(), LogConfig: runconfig.LogConfig{ Type: c.LogDriver, Config: c.LogOpt, }, Memory: c.MemLimit, MemorySwap: c.MemSwapLimit, NetworkMode: runconfig.NetworkMode(c.Net), ReadonlyRootfs: c.ReadOnly, PidMode: runconfig.PidMode(c.Pid), UTSMode: runconfig.UTSMode(c.Uts), IpcMode: runconfig.IpcMode(c.Ipc), PortBindings: binding, RestartPolicy: restart, SecurityOpt: c.SecurityOpt, } return config, host_config, nil }