mirror of https://github.com/docker/docs.git
Fixes a case of dangling endpoint during ungraceful daemon restart
When a container restarts after a ungraceful daemon restart, first cleanup any unclean sandbox before trying to allocate network resources. Signed-off-by: Madhu Venugopal <madhu@docker.com>
This commit is contained in:
parent
ebf76171f6
commit
0c07096b7d
|
@ -910,6 +910,13 @@ func createNetwork(controller libnetwork.NetworkController, dnet string, driver
|
||||||
}
|
}
|
||||||
|
|
||||||
func (container *Container) allocateNetwork() error {
|
func (container *Container) allocateNetwork() error {
|
||||||
|
sb := container.getNetworkSandbox()
|
||||||
|
if sb != nil {
|
||||||
|
// Cleanup any stale sandbox left over due to ungraceful daemon shutdown
|
||||||
|
if err := sb.Delete(); err != nil {
|
||||||
|
logrus.Errorf("failed to cleanup up stale network sandbox for container %s", container.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
updateSettings := false
|
updateSettings := false
|
||||||
if len(container.NetworkSettings.Networks) == 0 {
|
if len(container.NetworkSettings.Networks) == 0 {
|
||||||
mode := container.hostConfig.NetworkMode
|
mode := container.hostConfig.NetworkMode
|
||||||
|
@ -936,6 +943,18 @@ func (container *Container) allocateNetwork() error {
|
||||||
return container.writeHostConfig()
|
return container.writeHostConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (container *Container) getNetworkSandbox() libnetwork.Sandbox {
|
||||||
|
var sb libnetwork.Sandbox
|
||||||
|
container.daemon.netController.WalkSandboxes(func(s libnetwork.Sandbox) bool {
|
||||||
|
if s.ContainerID() == container.ID {
|
||||||
|
sb = s
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
return sb
|
||||||
|
}
|
||||||
|
|
||||||
// ConnectToNetwork connects a container to a netork
|
// ConnectToNetwork connects a container to a netork
|
||||||
func (container *Container) ConnectToNetwork(idOrName string) error {
|
func (container *Container) ConnectToNetwork(idOrName string) error {
|
||||||
if !container.Running {
|
if !container.Running {
|
||||||
|
@ -1001,14 +1020,7 @@ func (container *Container) connectToNetwork(idOrName string, updateSettings boo
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var sb libnetwork.Sandbox
|
sb := container.getNetworkSandbox()
|
||||||
controller.WalkSandboxes(func(s libnetwork.Sandbox) bool {
|
|
||||||
if s.ContainerID() == container.ID {
|
|
||||||
sb = s
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
if sb == nil {
|
if sb == nil {
|
||||||
options, err := container.buildSandboxOptions(n)
|
options, err := container.buildSandboxOptions(n)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue