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 continue
} }
if _, ok := serviceConfig.Labels[config.UserDockerLabel]; ok { if _, ok := serviceConfig.Labels[config.UserDockerLabel]; ok {
err = util.GenerateEngineScript(serviceConfig.Labels[config.UserDockerLabel]) err = util.GenerateDindEngineScript(serviceConfig.Labels[config.UserDockerLabel])
if err != nil { if err != nil {
log.Errorf("Failed to generate engine script: %v", err) log.Errorf("Failed to generate engine script: %v", err)
continue continue

View File

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

View File

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