Browse Source

[IMP] docker api

Gogs 6 years ago
parent
commit
bbc8319ff8
6 changed files with 541 additions and 18 deletions
  1. 1 1
      Gopkg.lock
  2. 0 4
      Gopkg.toml
  3. 5 2
      cmd/api.go
  4. 2 0
      data/app.ini
  5. 198 11
      modules/docker/docker.go
  6. 335 0
      tmp/server-errors.log

+ 1 - 1
Gopkg.lock

@@ -65,6 +65,6 @@
 [solve-meta]
   analyzer-name = "dep"
   analyzer-version = 1
-  inputs-digest = "10ad796954001e72772769f21ec442682d88cae0f8d9ddb3366a2fa0d4ed2b82"
+  inputs-digest = "68eb877401634af7d305f2161a981db3e7a7bd816c1440899aa2bdf772faf98d"
   solver-name = "gps-cdcl"
   solver-version = 1

+ 0 - 4
Gopkg.toml

@@ -45,10 +45,6 @@
   name = "github.com/mattn/go-sqlite3"
   version = "1.6.0"
 
-[[constraint]]
-  name = "github.com/docker/docker"
-  version = "1.13.1"
-
 [[constraint]]
   name = "github.com/fsouza/go-dockerclient"
   version = "docker-1.9/go-1.4"

+ 5 - 2
cmd/api.go

@@ -1,7 +1,9 @@
 package cmd
 
 import (
-	"bitbucket.org/robert2206/automation/modules/odoo"
+	"fmt"
+
+	"bitbucket.org/robert2206/automation/modules/docker"
 	"github.com/urfave/cli"
 )
 
@@ -22,6 +24,7 @@ var APICmd = cli.Command{
 }
 
 func runAPI(ctx *cli.Context) error {
-	odoo.Create("test 01")
+	ctrs, _ := docker.GetAllPublicPorts()
+	fmt.Println(ctrs)
 	return nil
 }

+ 2 - 0
data/app.ini

@@ -40,6 +40,8 @@ dbContainerIP = 172.10.0.10
 dbContainerPort = 5432
 dbUser = odoo
 dbPasswd = odoo
+memLimit = 100m
+memSwapLimit = 100m
 
 [git]
 reposPath = /opt/gogs/git/gogs-repositories

+ 198 - 11
modules/docker/docker.go

@@ -4,21 +4,93 @@ import (
 	"errors"
 	"strings"
 
-	S "bitbucket.org/robert2206/automation/modules/settings"
+	"bitbucket.org/robert2206/automation/modules/settings"
 	docker "github.com/fsouza/go-dockerclient"
 )
 
-type ContainerDescriptor struct {
-	Name      *string
-	ImageName *string
+var (
+	// errorContainerRemove is a dispatched error when container cannot be removed
+	errorContainerRemove = errors.New("container cannot be removed")
+)
+
+// Image represent a docker image
+type Image struct {
+	ID   string
+	Tag  string
+	Size int64
+}
+
+// Network represent a network ip used by docker
+type Network struct {
+	ID string
+	IP string
+}
+
+// Port represent a port user by docker container
+type Port struct {
+	IP          string
+	Type        string
+	PublicPort  int64
+	PrivatePort int64
+}
+
+// Container represent docker container
+type Container struct {
+	ID       string
+	Name     string
+	Image    string
+	State    string
+	Ports    []*Port
+	Networks map[string]*Network
 }
 
-func Create(dsc *ContainerDescriptor) {
+// Create a container
+func Create(name string, image string) (*Container, error) {
+	cli, err := getDockerClient()
+
+	if err != nil {
+		return nil, err
+	}
+
+	ctr, err := cli.CreateContainer(docker.CreateContainerOptions{
+		Name: name,
+		Config: &docker.Config{
+			Image:      image,
+			Memory:     102400,
+			MemorySwap: 102400,
+		},
+	})
+
+	if err != nil {
+		return nil, err
+	}
 
+	return &Container{
+		ID:    ctr.ID,
+		Name:  ctr.Name,
+		Image: ctr.Image,
+		State: ctr.State.Status,
+	}, nil
 }
 
-func Remove() {
+// Remove a container
+func Remove(idOrName string) error {
+	cli, err := getDockerClient()
+
+	if err != nil {
+		return err
+	}
+
+	ctr := GetContainer(idOrName)
 
+	if ctr == nil {
+		return errorContainerRemove
+	}
+
+	return cli.RemoveContainer(docker.RemoveContainerOptions{
+		ID:            ctr.ID,
+		RemoveVolumes: true,
+	})
 }
 
 // Start container
@@ -54,23 +126,138 @@ func Stop(idOrName string) error {
 	return cli.StopContainer(idOrName, 3)
 }
 
-func GetAllImages() {
+// GetAllImages returns all docker images
+func GetAllImages() ([]*Image, error) {
+	cli, err := getDockerClient()
+
+	if err != nil {
+		return nil, err
+	}
+
+	imgs, err := cli.ListImages(docker.ListImagesOptions{
+		All: true,
+	})
+
+	if err != nil {
+		return nil, err
+	}
+
+	results := make([]*Image, len(imgs))
+
+	for i, img := range imgs {
+		results[i] = &Image{
+			ID:   img.ID,
+			Tag:  img.RepoTags[0],
+			Size: img.Size,
+		}
+	}
+
+	return results, nil
+}
+
+// GetAllContainers returns all docker containers
+func GetAllContainers() ([]*Container, error) {
+	cli, err := getDockerClient()
+
+	if err != nil {
+		return nil, err
+	}
+
+	ctrs, err := cli.ListContainers(docker.ListContainersOptions{
+		All: true,
+	})
 
+	if err != nil {
+		return nil, err
+	}
+
+	results := make([]*Container, len(ctrs))
+
+	for i, ctr := range ctrs {
+		results[i] = &Container{
+			ID:    ctr.ID,
+			Name:  ctr.Names[0],
+			Image: ctr.Image,
+			State: ctr.State,
+			Ports: func() []*Port {
+				prts := make([]*Port, len(ctr.Ports))
+
+				for j, prt := range ctr.Ports {
+					prts[j] = &Port{
+						IP:          prt.IP,
+						Type:        prt.Type,
+						PublicPort:  prt.PublicPort,
+						PrivatePort: prt.PrivatePort,
+					}
+				}
+
+				return prts
+			}(),
+			Networks: func() map[string]*Network {
+				netws := make(map[string]*Network, len(ctr.Networks.Networks))
+
+				for k, netw := range ctr.Networks.Networks {
+					netws[k] = &Network{
+						ID: netw.NetworkID,
+						IP: netw.IPAddress,
+					}
+				}
+
+				return netws
+			}(),
+		}
+	}
+
+	return results, nil
 }
 
-func GetAllContainers() {
+// GetContainer return container matched by id or name
+func GetContainer(idOrName string) *Container {
+	ctrs, err := GetAllContainers()
+
+	if err != nil {
+		return nil
+	}
+
+	return func() *Container {
+		for _, ctr := range ctrs {
+			if ctr.ID == idOrName || ctr.Name == idOrName {
+				return ctr
+			}
+		}
 
+		return nil
+	}()
 }
 
-func GetAllExternalPorts() {
+// GetAllPublicPorts get all public exposed ports
+func GetAllPublicPorts() ([]int64, error) {
+	ctrs, err := GetAllContainers()
+
+	if err != nil {
+		return nil, err
+	}
+
+	return func() []int64 {
+		var prts []int64
+
+		for _, ctr := range ctrs {
+			for _, ptr := range ctr.Ports {
+				prts = append(prts, ptr.PublicPort)
+			}
+		}
 
+		return prts
+	}(), nil
 }
 
+// GetNetwork get network used by container
 func GetNetwork(idOrName string) {
 
 }
 
-func GetInternalIP(idOrName string) {
+// GetPrivateIP get private ip used by container
+func GetPrivateIP(idOrName string) {
 
 }
 
@@ -99,7 +286,7 @@ func checkIdOrName(idOrName string) error {
 }
 
 func getDockerClient() (*docker.Client, error) {
-	endpoint := S.Ctx.DockerSockDir
+	endpoint := settings.Ctx.DockerSockDir
 
 	if strings.HasSuffix(endpoint, ".sock") {
 		endpoint = strings.Join([]string{"unix:", endpoint}, "/")

+ 335 - 0
tmp/server-errors.log

@@ -647,4 +647,339 @@ modules/odoo/odoo.go:99:24: undefined: odooName
 modules/odoo/odoo.go:60:25: not enough arguments in call to makeConfiguration
 	have ()
 	want (string)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:70:12: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:71:10: syntax error: unexpected newline, expecting comma or }
+modules/docker/docker.go:78:10: syntax error: unexpected range, expecting semicolon or newline
+modules/docker/docker.go:80:2: syntax error: unexpected }, expecting expression
+modules/docker/docker.go:85:6: syntax error: unexpected GetAllExternalPorts, expecting (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:76:6: ctr declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:17:18: undefined: ContainerDescriptor
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:79:19: syntax error: unexpected ), expecting name or (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:78:12: Container literal evaluated but not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:78:3: c declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:77:17: cannot make type Container
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:77:2: results declared and not used
+modules/docker/docker.go:80:3: c declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:86:14: undefined: re
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/cmd
+cmd/api.go:25:2: ctrs declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:64:3: syntax error: unexpected return, expecting expression
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:64:3: syntax error: unexpected return, expecting expression
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:83:20: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:85:10: syntax error: unexpected ctr, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:85:10: syntax error: unexpected ctr, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:91:3: syntax error: unexpected }, expecting name or (
+modules/docker/docker.go:92:3: syntax error: unexpected newline, expecting comma or )
+modules/docker/docker.go:94:2: syntax error: unexpected return at end of statement
+modules/docker/docker.go:97:6: syntax error: unexpected GetAllExternalPorts, expecting (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:91:4: too many arguments to return
+	have ([]int)
+	want ()
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:92:16: syntax error: unexpected range, expecting := or = or comma
+modules/docker/docker.go:94:4: syntax error: unexpected }, expecting expression
+modules/docker/docker.go:96:4: syntax error: unexpected return, expecting expression
+modules/docker/docker.go:97:4: syntax error: unexpected ) at end of statement
+modules/docker/docker.go:98:3: syntax error: unexpected newline, expecting comma or )
+modules/docker/docker.go:100:2: syntax error: unexpected return at end of statement
+modules/docker/docker.go:103:6: syntax error: unexpected GetAllExternalPorts, expecting (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:92:8: i declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:92:11: port declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:88:32: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:92:10: invalid operation: port[j] (type docker.APIPort does not support indexing)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:92:17: unknown field 'ExternalPorts' in struct literal of type Container
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:94:11: syntax error: unexpected go, expecting expression
+modules/docker/docker.go:107:5: syntax error: unexpected ( at end of statement
+modules/docker/docker.go:109:2: syntax error: non-declaration statement outside function body
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:94:11: syntax error: unexpected go, expecting expression
+modules/docker/docker.go:107:5: syntax error: unexpected comma at end of statement
+modules/docker/docker.go:109:2: syntax error: non-declaration statement outside function body
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:94:11: syntax error: unexpected go, expecting expression
+modules/docker/docker.go:107:5: syntax error: unexpected ( at end of statement
+modules/docker/docker.go:109:2: syntax error: non-declaration statement outside function body
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:107:7: cannot call non-function (func literal)() (type []Port)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:86:15: syntax error: unexpected newline, expecting type
+modules/docker/docker.go:88:2: syntax error: unexpected for at end of statement
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:86:13: type []Container is not an expression
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:86:11: syntax error: unexpected ], expecting expression
+modules/docker/docker.go:88:2: syntax error: unexpected for, expecting ]
+modules/docker/docker.go:107:5: syntax error: unexpected ( after top level declaration
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:89:9: append(results, Container literal) evaluated but not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:88:6: i declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:98:11: non-name ports[j] on left side of :=
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:98:15: cannot use Port literal (type *Port) as type Port in assignment
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:95:14: invalid indirect of make([]Port, len(ctr.Ports)) (type []Port)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:77:12: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:77:12: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:77:12: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:77:12: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:77:12: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:73:3: too many arguments to return
+	have (nil, error)
+	want ()
+modules/docker/docker.go:81:3: too many arguments to return
+	have (error)
+	want ()
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:87:1: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:88:1: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:116:11: invalid indirect of (func literal)() (type []Port)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:91:20: syntax error: unexpected ), expecting name or (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:93:20: syntax error: unexpected ), expecting name or (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:97:18: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:102:4: cannot use nil as type string in return argument
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:102:14: cannot use new(string) (type *string) as type string in return argument
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:102:23: invalid pointer type *string for composite literal
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:102:16: type string is not an expression
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:103:14: missing argument to new
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:103:21: cannot use 0 (type int) as type string in map index
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:103:22: syntax error: unexpected ], expecting expression
+modules/docker/docker.go:104:3: syntax error: unexpected }, expecting expression
+modules/docker/docker.go:105:3: syntax error: unexpected newline, expecting comma or )
+modules/docker/docker.go:107:2: syntax error: unexpected return at end of statement
+modules/docker/docker.go:111:6: syntax error: unexpected GetAllContainers, expecting (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:103:21: cannot use 0 (type int) as type string in map index
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:41:13: undefined: idOrName
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:137:31: undefined: ctnr
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:15:7: undefined: strin
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:133:9: cannot use ctr.Names (type []string) as type string in field value
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:153:2: ctrs declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:159:14: cannot use func literal (type func() []int64) as type error in return argument:
+	func() []int64 does not implement error (missing Error method)
+modules/docker/docker.go:161:2: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:159:14: cannot use func literal (type func() []int64) as type error in return argument:
+	func() []int64 does not implement error (missing Error method)
+modules/docker/docker.go:161:2: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:159:14: cannot use func literal (type func() []int64) as type error in return argument:
+	func() []int64 does not implement error (missing Error method)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:163:3: cannot use (func literal)() (type []int64) as type error in return argument:
+	[]int64 does not implement error (missing Error method)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:153:2: ctrs declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:162:10: ctr declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/cmd
+cmd/api.go:27:13: undefined: docker.GetAllExternalPorts
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:37:2: undefined: cli
+modules/docker/docker.go:37:7: undefined: err
+modules/docker/docker.go:39:5: undefined: err
+modules/docker/docker.go:43:2: undefined: cli
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:37:2: undefined: cli
+modules/docker/docker.go:37:7: undefined: err
+modules/docker/docker.go:39:5: undefined: err
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:37:2: cli declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:45:8: unknown field 'Image' in struct literal of type docker.CreateContainerOptions
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:47:4: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:45:9: cannot use docker.Config literal (type docker.Config) as type *docker.Config in field value
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:45:11: invalid indirect of docker.Config literal (type docker.Config)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:46:6: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:47:22: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:45:9: cannot use docker.Config literal (type docker.Config) as type *docker.Config in field value
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:52:5: cli.Cre undefined (type *docker.Client has no field or method Cre)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:43:2: ctr declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:57:5: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:57:17: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:151:9: unknown field 'Names' in struct literal of type Container
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:56:2: result declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:149:14: cannot use Container literal (type *Container) as type Container in assignment
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:171:2: cannot use results (type []*Container) as type []Container in return argument
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:56:2: result declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:158:15: cannot use Port literal (type *Port) as type Port in assignment
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:166:5: cannot use ports (type []*Port) as type []Port in return argument
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:154:9: cannot use (func literal)() (type []*Port) as type []Port in field value
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:56:2: result declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:40:3: not enough arguments to return
+	have (nil)
+	want (Container, error)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:40:3: cannot use nil as type Container in return argument
+modules/docker/docker.go:53:3: not enough arguments to return
+	have (nil)
+	want (Container, error)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:56:2: result declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:56:2: result declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:60:8: cannot use ctr.State (type docker.State) as type string in field value
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:121:14: cannot use Image literal (type *Image) as type Image in assignment
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:128:2: cannot use results (type []*Image) as type []Image in return argument
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:74:17: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:74:7: unknown field 'Name' in struct literal of type docker.RemoveContainerOptions
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:75:22: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:189:14: syntax error: unexpected :, expecting := or = or comma
+modules/docker/docker.go:190:4: syntax error: unexpected if, expecting semicolon or newline
+modules/docker/docker.go:191:5: syntax error: unexpected return, expecting expression
+modules/docker/docker.go:195:1: syntax error: non-declaration statement outside function body
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:187:9: cannot use func literal (type func() *Container) as type *Container in return argument
+modules/docker/docker.go:189:17: undefined: id
+modules/docker/docker.go:190:12: cannot use &ctr (type **Container) as type *Container in return argument
+modules/docker/docker.go:193:2: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:187:9: cannot use func literal (type func() *Container) as type *Container in return argument
+modules/docker/docker.go:190:12: cannot use &ctr (type **Container) as type *Container in return argument
+modules/docker/docker.go:193:2: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:190:12: cannot use &ctr (type **Container) as type *Container in return argument
+modules/docker/docker.go:193:2: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:190:12: cannot use &ctr (type **Container) as type *Container in return argument
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:72:2: ctr declared and not used
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:73:5: ctr.Remove undefined (type *Container has no field or method Remove)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:192:5: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:180:6: undefined: ports
+modules/docker/docker.go:190:12: cannot use func literal (type func() []*Network) as type []*Network in field value
+modules/docker/docker.go:192:4: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:180:6: undefined: ports
+modules/docker/docker.go:190:12: cannot use func literal (type func() []*Network) as type []*Network in field value
+modules/docker/docker.go:191:34: invalid argument ctr.Networks (type docker.NetworkList) for len
+modules/docker/docker.go:192:4: missing return at end of function
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:194:4: syntax error: unexpected }, expecting expression
+modules/docker/docker.go:195:3: syntax error: unexpected }, expecting expression
+modules/docker/docker.go:196:2: syntax error: unexpected }, expecting expression
+modules/docker/docker.go:202:6: syntax error: unexpected GetContainer, expecting (
+modules/docker/docker.go:221:6: syntax error: unexpected GetAllPublicPorts, expecting (
+modules/docker/docker.go:239:2: syntax error: unexpected newline, expecting comma or }
+modules/docker/docker.go:242:32: syntax error: unexpected ) at end of statement
+modules/docker/docker.go:247:6: syntax error: unexpected GetPrivateIP, expecting (
+modules/docker/docker.go:251:6: syntax error: unexpected getClientFor, expecting (
+modules/docker/docker.go:267:6: syntax error: unexpected checkIdOrName, expecting (
+modules/docker/docker.go:267:6: too many errors
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:195:15: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:195:18: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:191:34: invalid argument ctr.Networks (type docker.NetworkList) for len
+modules/docker/docker.go:193:20: cannot range over ctr.Networks (type docker.NetworkList)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:193:20: cannot range over ctr.Networks (type docker.NetworkList)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:193:31: syntax error: unexpected {, expecting name or (
+modules/docker/docker.go:196:7: syntax error: unexpected newline, expecting { after for clause
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:194:11: non-integer slice index k
+modules/docker/docker.go:195:15: netw.ID undefined (type docker.ContainerNetwork has no field or method ID)
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:194:11: non-integer slice index k
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:191:26: syntax error: unexpected ], expecting expression
+modules/docker/docker.go:193:5: syntax error: unexpected for at end of statement
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:194:11: non-integer slice index k
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:191:23: syntax error: unexpected ], expecting type
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:199:5: cannot use netws (type map[string]*Network) as type []*Network in return argument
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:190:12: cannot use (func literal)() (type map[string]*Network) as type []*Network in field value
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:198:6: syntax error: unexpected }, expecting name or (
+modules/docker/docker.go:202:5: syntax error: unexpected ( at end of statement
+modules/docker/docker.go:203:4: syntax error: unexpected newline, expecting comma or }
+modules/docker/docker.go:210:6: syntax error: unexpected GetContainer, expecting (
+modules/docker/docker.go:229:6: syntax error: unexpected GetAllPublicPorts, expecting (
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:197:25: syntax error: unexpected newline, expecting comma or }
+, cmd err: exit status 2stderr: # bitbucket.org/robert2206/automation/modules/docker
+modules/docker/docker.go:87:10: undefined: containerRemoveError
 , cmd err: exit status 2