From 67eebd2c593813a3f1b96aa26fb298ec60ff5b8d Mon Sep 17 00:00:00 2001 From: Fatih Cetinkaya Date: Thu, 13 Mar 2014 03:14:33 -0400 Subject: [PATCH 1/5] Fix for eventCallback argument `docker.StartMonitorEvents` requires `func(*dockerclient.Event, ...interface {})` in function argument --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ac12dab882fd..45a39bd6bd20c 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ import ( ) // Callback used to listen to Docker's events -func eventCallback(event *dockerclient.Event) { +func eventCallback(event *dockerclient.Event, args ...interface{}) { log.Printf("Received event: %#v\n", *event) } From 964c4f5d1a46a9305ccc3a928cce58b0161e9bf9 Mon Sep 17 00:00:00 2001 From: Fatih Cetinkaya Date: Thu, 13 Mar 2014 03:31:12 -0400 Subject: [PATCH 2/5] Check for the length of containers variable Avoid `panic: runtime error: index out of range` if there is no any running containers --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 45a39bd6bd20c..a0f049ab037cb 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,11 @@ func main() { } // Inspect the first container returned - id := containers[0].Id - info, _ := docker.InspectContainer(id) - log.Println(info) + if len(containers) > 0 { + id := containers[0].Id + info, _ := docker.InspectContainer(id) + log.Println(info) + } // Create a container containerConfig := &dockerclient.ContainerConfig{ From 029e8fa30d5e1b45b26d47198a75193376b36b2e Mon Sep 17 00:00:00 2001 From: cmfatih Date: Thu, 13 Mar 2014 17:05:56 -0400 Subject: [PATCH 3/5] Specific Ubuntu version for quick download --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index a0f049ab037cb..74bd80a1b938f 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,7 @@ func main() { } // Create a container - containerConfig := &dockerclient.ContainerConfig{ - Image: "ubuntu", Cmd: []string{"bash"}} + containerConfig := &dockerclient.ContainerConfig{Image: "ubuntu:12.04", Cmd: []string{"bash"}} containerId, err := docker.CreateContainer(containerConfig) if err != nil { log.Fatal(err) From 73f6c5c6ffabdb90501dea94ef98ad8826ae78ce Mon Sep 17 00:00:00 2001 From: cmfatih Date: Thu, 13 Mar 2014 17:07:56 -0400 Subject: [PATCH 4/5] Typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 74bd80a1b938f..24c0ced42e83f 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ func main() { } // Stop the container (with 5 seconds timeout) - docker.StartContainer(containerId, 5) + docker.StopContainer(containerId, 5) // Listen to events docker.StartMonitorEvents(eventCallback) From 3a915c2c972f5e55026b30574034427495ddecd4 Mon Sep 17 00:00:00 2001 From: cmfatih Date: Thu, 13 Mar 2014 17:12:27 -0400 Subject: [PATCH 5/5] Update for Remote API v1.10 --- dockerclient.go | 25 ++++++++++++------------- types.go | 5 +++++ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/dockerclient.go b/dockerclient.go index a7c9a73799f0b..c0ed214e15e21 100644 --- a/dockerclient.go +++ b/dockerclient.go @@ -70,7 +70,7 @@ func (client *DockerClient) ListContainers(all bool) ([]Container, error) { argAll = 1 } args := fmt.Sprintf("?all=%d", argAll) - data, err := client.doRequest("GET", "/v1.8/containers/json"+args, nil) + data, err := client.doRequest("GET", "/v1.10/containers/json"+args, nil) if err != nil { return nil, err } @@ -83,7 +83,7 @@ func (client *DockerClient) ListContainers(all bool) ([]Container, error) { } func (client *DockerClient) InspectContainer(id string) (*ContainerInfo, error) { - uri := fmt.Sprintf("/v1.8/containers/%s/json", id) + uri := fmt.Sprintf("/v1.10/containers/%s/json", id) data, err := client.doRequest("GET", uri, nil) if err != nil { return nil, err @@ -101,22 +101,21 @@ func (client *DockerClient) CreateContainer(config *ContainerConfig) (string, er if err != nil { return "", err } - uri := "/v1.8/containers/create" + uri := "/v1.10/containers/create" data, err = client.doRequest("POST", uri, data) if err != nil { return "", err } - fmt.Println(string(data)) - result := make(map[string]string) - err = json.Unmarshal(data, &result) + result := &RespContainersCreate{} + err = json.Unmarshal(data, result) if err != nil { return "", err } - return result["Id"], nil + return result.Id, nil } func (client *DockerClient) StartContainer(id string) error { - uri := fmt.Sprintf("/v1.8/containers/%s/start", id) + uri := fmt.Sprintf("/v1.10/containers/%s/start", id) _, err := client.doRequest("POST", uri, nil) if err != nil { return err @@ -125,7 +124,7 @@ func (client *DockerClient) StartContainer(id string) error { } func (client *DockerClient) StopContainer(id string, timeout int) error { - uri := fmt.Sprintf("/v1.8/containers/%s/stop?t=%d", id, timeout) + uri := fmt.Sprintf("/v1.10/containers/%s/stop?t=%d", id, timeout) _, err := client.doRequest("POST", uri, nil) if err != nil { return err @@ -134,7 +133,7 @@ func (client *DockerClient) StopContainer(id string, timeout int) error { } func (client *DockerClient) RestartContainer(id string, timeout int) error { - uri := fmt.Sprintf("/v1.8/containers/%s/restart?t=%d", id, timeout) + uri := fmt.Sprintf("/v1.10/containers/%s/restart?t=%d", id, timeout) _, err := client.doRequest("POST", uri, nil) if err != nil { return err @@ -143,7 +142,7 @@ func (client *DockerClient) RestartContainer(id string, timeout int) error { } func (client *DockerClient) KillContainer(id string) error { - uri := fmt.Sprintf("/v1.8/containers/%s/kill", id) + uri := fmt.Sprintf("/v1.10/containers/%s/kill", id) _, err := client.doRequest("POST", uri, nil) if err != nil { return err @@ -162,7 +161,7 @@ func (client *DockerClient) StartMonitorEvents(cb func(*Event, ...interface{}), if running == 0 { break } - uri := client.URL.String() + "/v1.8/events" + uri := client.URL.String() + "/v1.10/events" resp, err := client.HTTPClient.Get(uri) if err != nil { time.Sleep(wait) @@ -196,7 +195,7 @@ func (client *DockerClient) StopAllMonitorEvents() { } func (client *DockerClient) Version() (*Version, error) { - data, err := client.doRequest("GET", "/v1.8/version", nil) + data, err := client.doRequest("GET", "/v1.10/version", nil) if err != nil { return nil, err } diff --git a/types.go b/types.go index 1740bd7b7ea8a..060702c2a88c7 100644 --- a/types.go +++ b/types.go @@ -95,3 +95,8 @@ type Version struct { GitCommit string GoVersion string } + +type RespContainersCreate struct { + Id string + Warnings []string +}