1
0
mirror of https://github.com/rancher/os.git synced 2025-09-01 14:48:55 +00:00

Fix bugs for multiple user docker daemons:

1. Optimize the remove logic of the dind engine
2. Distinguish between user docker engine and Dind engine
This commit is contained in:
niusmallnan
2018-07-16 14:42:35 +08:00
committed by niusmallnan
parent 7ef84fbbe9
commit 5811357c58
3 changed files with 43 additions and 22 deletions

View File

@@ -104,7 +104,7 @@ func consoleInitFunc() error {
continue
}
if _, ok := serviceConfig.Labels[config.UserDockerLabel]; ok {
err = util.GenerateEngineScript(serviceConfig.Labels[config.UserDockerLabel])
err = util.GenerateDindEngineScript(serviceConfig.Labels[config.UserDockerLabel])
if err != nil {
log.Errorf("Failed to generate engine script: %v", err)
continue

View File

@@ -39,7 +39,7 @@ func engineSubcommands() []cli.Command {
return []cli.Command{
{
Name: "switch",
Usage: "switch Docker engine without a reboot",
Usage: "switch user Docker engine without a reboot",
Action: engineSwitch,
Flags: []cli.Flag{
cli.BoolFlag{
@@ -54,7 +54,7 @@ func engineSubcommands() []cli.Command {
},
{
Name: "create",
Usage: "create Docker engine without a reboot",
Usage: "create user Docker engine without a reboot",
ArgsUsage: "<name>",
Before: preFlightValidate,
Action: engineCreate,
@@ -85,7 +85,7 @@ func engineSubcommands() []cli.Command {
},
{
Name: "rm",
Usage: "remove Docker engine without a reboot",
Usage: "remove Dind engine without a reboot",
ArgsUsage: "<name>",
Before: func(c *cli.Context) error {
if len(c.Args()) != 1 {
@@ -93,31 +93,27 @@ func engineSubcommands() []cli.Command {
}
return nil
},
Action: engineRemove,
Action: dindEngineRemove,
Flags: []cli.Flag{
cli.IntFlag{
Name: "timeout,t",
Usage: "Specify a shutdown timeout in seconds.",
Usage: "specify a shutdown timeout in seconds",
Value: 10,
},
cli.BoolFlag{
Name: "force,f",
Usage: "Allow deletion of all services",
},
cli.BoolFlag{
Name: "v",
Usage: "Remove volumes associated with containers",
Name: "force, f",
Usage: "do not prompt for input",
},
},
},
{
Name: "enable",
Usage: "set Docker engine to be switched on next reboot",
Usage: "set user Docker engine to be switched on next reboot",
Action: engineEnable,
},
{
Name: "list",
Usage: "list available Docker engines",
Usage: "list available Docker engines (include the Dind engines)",
Action: engineList,
},
}
@@ -189,7 +185,7 @@ func engineCreate(c *cli.Context) error {
}
// generate engine script
err = util.GenerateEngineScript(name)
err = util.GenerateDindEngineScript(name)
if err != nil {
log.Fatal(err)
}
@@ -197,7 +193,19 @@ func engineCreate(c *cli.Context) error {
return nil
}
func engineRemove(c *cli.Context) error {
func dindEngineRemove(c *cli.Context) error {
if !c.Bool("force") {
if !yes("Continue") {
return nil
}
}
// app.ProjectDelete needs to use this flag
// Allow deletion of the Dind engine
c.Set("force", "true")
// Remove volumes associated with the Dind engine container
c.Set("v", "true")
name := c.Args()[0]
cfg := config.LoadConfig()
p, err := compose.GetProject(cfg, true, false)
@@ -239,6 +247,12 @@ func engineRemove(c *cli.Context) error {
log.Fatal(err)
}
// 5. remove dind engine script
err = util.RemoveDindEngineScript(name)
if err != nil {
return err
}
return nil
}

View File

@@ -296,12 +296,9 @@ func RunCommandSequence(commandSequence []osYaml.StringandSlice) error {
return nil
}
func GenerateEngineScript(name string) error {
if _, err := os.Stat("/usr/bin/docker-" + name); err == nil {
err = os.Remove("/usr/bin/docker-" + name)
if err != nil {
return err
}
func GenerateDindEngineScript(name string) error {
if err := RemoveDindEngineScript(name); err != nil {
return err
}
bytes := []byte("/usr/bin/docker -H unix:///var/lib/m-user-docker/" + name + "/docker-" + name + ".sock $@")
@@ -313,3 +310,13 @@ func GenerateEngineScript(name string) error {
return nil
}
func RemoveDindEngineScript(name string) error {
if _, err := os.Stat("/usr/bin/docker-" + name); err == nil {
err = os.Remove("/usr/bin/docker-" + name)
if err != nil {
return err
}
}
return nil
}