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:
@@ -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
|
||||||
|
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
19
util/util.go
19
util/util.go
@@ -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
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user