From 40fed60ec4d30067f33aad439218cf952933bfe7 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Fri, 12 Jun 2015 18:44:37 +0000 Subject: [PATCH] When linking to other containers, introduce a slight delay; this lets the Docker API get those containers running. Otherwise when you try to start a container linking to them, the start command will fail, leading to an error. --- resource_docker_container_funcs.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/resource_docker_container_funcs.go b/resource_docker_container_funcs.go index 9408d8a6..d355b898 100644 --- a/resource_docker_container_funcs.go +++ b/resource_docker_container_funcs.go @@ -5,6 +5,7 @@ import ( "fmt" "strconv" "strings" + "time" dc "github.com/fsouza/go-dockerclient" "github.com/hashicorp/terraform/helper/schema" @@ -19,6 +20,8 @@ func resourceDockerContainerCreate(d *schema.ResourceData, meta interface{}) err return err } + delayStart := false + image := d.Get("image").(string) if _, ok := data.DockerImages[image]; !ok { if _, ok := data.DockerImages[image+":latest"]; !ok { @@ -106,6 +109,13 @@ func resourceDockerContainerCreate(d *schema.ResourceData, meta interface{}) err if v, ok := d.GetOk("links"); ok { hostConfig.Links = stringSetToStringSlice(v.(*schema.Set)) + delayStart = true + } + + // For instance, Docker will fail to start conatiners with links + // to other containers if the containers haven't started yet + if delayStart { + time.Sleep(3 * time.Second) } if err := client.StartContainer(retContainer.ID, hostConfig); err != nil {