diff --git a/cmd/drone-docker/main.go b/cmd/drone-docker/main.go index 742d4a1..c4e01aa 100644 --- a/cmd/drone-docker/main.go +++ b/cmd/drone-docker/main.go @@ -112,6 +112,12 @@ func main() { Usage: "don't start the docker daemon", EnvVar: "PLUGIN_DAEMON_OFF", }, + cli.IntFlag{ + Name: "daemon.retry-count", + Usage: "number of retry attempts to reach docker daemon", + Value: 15, + EnvVar: "PLUGIN_DAEMON_RETRY_COUNT", + }, cli.StringFlag{ Name: "dockerfile", Usage: "build dockerfile", @@ -419,6 +425,7 @@ func run(c *cli.Context) error { DNSSearch: c.StringSlice("daemon.dns-search"), MTU: c.String("daemon.mtu"), Experimental: c.Bool("daemon.experimental"), + RetryCount: c.Int("daemon.retry-count"), RegistryType: registryType, }, BaseImageRegistry: c.String("docker.baseimageregistry"), diff --git a/docker.go b/docker.go index b7068a6..2ff82ac 100644 --- a/docker.go +++ b/docker.go @@ -30,6 +30,7 @@ type ( MTU string // Docker daemon mtu setting IPv6 bool // Docker daemon IPv6 networking Experimental bool // Docker daemon enable experimental mode + RetryCount int // Number of retry attempts to reach Docker daemon RegistryType drone.RegistryType // Docker registry type } @@ -137,14 +138,18 @@ func (p Plugin) Exec() error { // poll the docker daemon until it is started. This ensures the daemon is // ready to accept connections before we proceed. + maxRetries := p.Daemon.RetryCount + if maxRetries <= 0 { + maxRetries = 15 // default value + } for i := 0; ; i++ { cmd := commandInfo() err := cmd.Run() if err == nil { break } - if i == 15 { - fmt.Println("Unable to reach Docker Daemon after 15 attempts.") + if i == maxRetries { + fmt.Printf("Unable to reach Docker Daemon after %d attempts.\n", maxRetries) break } time.Sleep(time.Second * 1)