本文整理汇总了Golang中github.com/Azure/azure-docker-extension/pkg/driver.DistroDriver.StartDocker方法的典型用法代码示例。如果您正苦于以下问题:Golang DistroDriver.StartDocker方法的具体用法?Golang DistroDriver.StartDocker怎么用?Golang DistroDriver.StartDocker使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/Azure/azure-docker-extension/pkg/driver.DistroDriver
的用法示例。
在下文中一共展示了DistroDriver.StartDocker方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: enable
func enable(he vmextension.HandlerEnvironment, d driver.DistroDriver) error {
// Install docker daemon
log.Printf("++ install docker")
if _, err := exec.LookPath("docker"); err == nil {
log.Printf("docker already installed. not re-installing")
} else {
// TODO(ahmetb) Temporary retry logic around installation for serialization
// problem in Azure VM Scale Sets. In case of scale-up event, the new VM with
// multiple extensions (such as Linux Diagnostics and Docker Extension) will install
// the extensions in parallel and that will result in non-deterministic
// acquisition of dpkg lock (apt-get install) and thus causing one of the
// extensions to fail.
//
// Adding this temporary retry logic just for Linux Diagnostics extension
// assuming it will take at most 5 minutes to be done with apt-get lock.
//
// This retry logic should be removed once the issue is fixed on the resource
// provider layer.
var (
nRetries = 6
retryInterval = time.Minute * 1
)
for nRetries > 0 {
if err := d.InstallDocker(); err != nil {
nRetries--
if nRetries == 0 {
return err
}
log.Printf("install failed. remaining attempts=%d. error=%v", nRetries, err)
log.Printf("sleeping %s", retryInterval)
time.Sleep(retryInterval)
} else {
break
}
}
}
log.Printf("-- install docker")
// Install docker-compose
log.Printf("++ install docker-compose")
if err := installCompose(composeBinPath(d)); err != nil {
return fmt.Errorf("error installing docker-compose: %v", err)
}
log.Printf("-- install docker-compose")
// Add user to 'docker' group to user docker as non-root
u, err := util.GetAzureUser()
if err != nil {
return fmt.Errorf("failed to get provisioned user: %v", err)
}
log.Printf("++ add user to docker group")
if out, err := executil.Exec("usermod", "-aG", "docker", u); err != nil {
log.Printf("%s", string(out))
return err
}
log.Printf("-- add user to docker group")
settings, err := parseSettings(he.HandlerEnvironment.ConfigFolder)
if err != nil {
return err
}
// Install docker remote access certs
log.Printf("++ setup docker certs")
if err := installDockerCerts(*settings, dockerCfgDir); err != nil {
return fmt.Errorf("error installing docker certs: %v", err)
}
log.Printf("-- setup docker certs")
// Update dockeropts
log.Printf("++ update dockeropts")
restartNeeded, err := updateDockerOpts(d, getArgs(*settings, d))
if err != nil {
return fmt.Errorf("failed to update dockeropts: %v", err)
}
log.Printf("restart needed: %v", restartNeeded)
log.Printf("-- update dockeropts")
// Restart docker
log.Printf("++ restart docker")
if !restartNeeded {
log.Printf("no restart needed. issuing only a start command.")
_ = d.StartDocker() // ignore error as it already may be running due to multiple calls to enable
} else {
log.Printf("restarting docker-engine")
if err := d.RestartDocker(); err != nil {
return err
}
}
time.Sleep(3 * time.Second) // wait for instance to come up
log.Printf("-- restart docker")
// Login Docker registry server
log.Printf("++ login docker registry")
if err := loginRegistry(settings.Login); err != nil {
return err
}
log.Printf("-- login docker registry")
//.........这里部分代码省略.........