1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #2409 from pnasrat/2089-fix-restart-runtime-error

Fix restart runtime error with ghost container networking
This commit is contained in:
Michael Crosby 2013-11-04 08:55:11 -08:00
commit 35690e76b4
3 changed files with 44 additions and 8 deletions

View file

@ -140,6 +140,7 @@ odk- <github@odkurzacz.org>
Pascal Borreli <pascal@borreli.com> Pascal Borreli <pascal@borreli.com>
Paul Bowsher <pbowsher@globalpersonals.co.uk> Paul Bowsher <pbowsher@globalpersonals.co.uk>
Paul Hammond <paul@paulhammond.org> Paul Hammond <paul@paulhammond.org>
Paul Nasrat <pnasrat@gmail.com>
Phil Spitler <pspitler@gmail.com> Phil Spitler <pspitler@gmail.com>
Piotr Bogdan <ppbogdan@gmail.com> Piotr Bogdan <ppbogdan@gmail.com>
pysqz <randomq@126.com> pysqz <randomq@126.com>

View file

@ -1062,12 +1062,7 @@ func (container *Container) allocateNetwork() error {
var iface *NetworkInterface var iface *NetworkInterface
var err error var err error
if !container.State.Ghost { if container.State.Ghost {
iface, err = container.runtime.networkManager.Allocate()
if err != nil {
return err
}
} else {
manager := container.runtime.networkManager manager := container.runtime.networkManager
if manager.disabled { if manager.disabled {
iface = &NetworkInterface{disabled: true} iface = &NetworkInterface{disabled: true}
@ -1077,8 +1072,20 @@ func (container *Container) allocateNetwork() error {
Gateway: manager.bridgeNetwork.IP, Gateway: manager.bridgeNetwork.IP,
manager: manager, manager: manager,
} }
ipNum := ipToInt(iface.IPNet.IP) if iface !=nil && iface.IPNet.IP != nil {
manager.ipAllocator.inUse[ipNum] = struct{}{} ipNum := ipToInt(iface.IPNet.IP)
manager.ipAllocator.inUse[ipNum] = struct{}{}
} else {
iface, err = container.runtime.networkManager.Allocate()
if err != nil {
return err
}
}
}
} else {
iface, err = container.runtime.networkManager.Allocate()
if err != nil {
return err
} }
} }

View file

@ -1652,3 +1652,31 @@ func TestMultipleVolumesFrom(t *testing.T) {
t.Fail() t.Fail()
} }
} }
func TestRestartGhost(t *testing.T) {
runtime := mkRuntime(t)
defer nuke(runtime)
container, _, err := runtime.Create(
&Config{
Image: GetTestImage(runtime).ID,
Cmd: []string{"sh", "-c", "echo -n bar > /test/foo"},
Volumes: map[string]struct{}{"/test": {}},
},
"",
)
if err != nil {
t.Fatal(err)
}
if err := container.Kill(); err != nil {
t.Fatal(err)
}
container.State.Ghost = true
_, err = container.Output()
if err != nil {
t.Fatal(err)
}
}