Merge branch 'unreserve' of https://github.com/rhatdan/libcontainer into rhatdan-unreserve
This commit is contained in:
commit
efd5f0a7e1
4
Makefile
4
Makefile
|
@ -12,10 +12,10 @@ sh:
|
||||||
GO_PACKAGES = $(shell find . -not \( -wholename ./vendor -prune -o -wholename ./.git -prune \) -name '*.go' -print0 | xargs -0n1 dirname | sort -u)
|
GO_PACKAGES = $(shell find . -not \( -wholename ./vendor -prune -o -wholename ./.git -prune \) -name '*.go' -print0 | xargs -0n1 dirname | sort -u)
|
||||||
|
|
||||||
direct-test:
|
direct-test:
|
||||||
go test -cover -v $(GO_PACKAGES)
|
go test $(TEST_TAGS) -cover -v $(GO_PACKAGES)
|
||||||
|
|
||||||
direct-test-short:
|
direct-test-short:
|
||||||
go test -cover -test.short -v $(GO_PACKAGES)
|
go test $(TEST_TAGS) -cover -test.short -v $(GO_PACKAGES)
|
||||||
|
|
||||||
direct-build:
|
direct-build:
|
||||||
go build -v $(GO_PACKAGES)
|
go build -v $(GO_PACKAGES)
|
||||||
|
|
|
@ -47,6 +47,9 @@ type Config struct {
|
||||||
// Networks specifies the container's network setup to be created
|
// Networks specifies the container's network setup to be created
|
||||||
Networks []*Network `json:"networks,omitempty"`
|
Networks []*Network `json:"networks,omitempty"`
|
||||||
|
|
||||||
|
// Ipc specifies the container's ipc setup to be created
|
||||||
|
IpcNsPath string `json:"ipc,omitempty"`
|
||||||
|
|
||||||
// Routes can be specified to create entries in the route table as the container is started
|
// Routes can be specified to create entries in the route table as the container is started
|
||||||
Routes []*Route `json:"routes,omitempty"`
|
Routes []*Route `json:"routes,omitempty"`
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package ipc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/docker/libcontainer/system"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Join the IPC Namespace of specified ipc path if it exists.
|
||||||
|
// If the path does not exist then you are not joining a container.
|
||||||
|
func Initialize(nsPath string) error {
|
||||||
|
|
||||||
|
if nsPath == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
f, err := os.OpenFile(nsPath, os.O_RDONLY, 0)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed get IPC namespace fd: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = system.Setns(f.Fd(), syscall.CLONE_NEWIPC)
|
||||||
|
f.Close()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to setns current IPC namespace: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"github.com/docker/libcontainer"
|
"github.com/docker/libcontainer"
|
||||||
"github.com/docker/libcontainer/apparmor"
|
"github.com/docker/libcontainer/apparmor"
|
||||||
"github.com/docker/libcontainer/console"
|
"github.com/docker/libcontainer/console"
|
||||||
|
"github.com/docker/libcontainer/ipc"
|
||||||
"github.com/docker/libcontainer/label"
|
"github.com/docker/libcontainer/label"
|
||||||
"github.com/docker/libcontainer/mount"
|
"github.com/docker/libcontainer/mount"
|
||||||
"github.com/docker/libcontainer/netlink"
|
"github.com/docker/libcontainer/netlink"
|
||||||
|
@ -66,6 +67,9 @@ func Init(container *libcontainer.Config, uncleanRootfs, consolePath string, syn
|
||||||
return fmt.Errorf("setctty %s", err)
|
return fmt.Errorf("setctty %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if err := ipc.Initialize(container.IpcNsPath); err != nil {
|
||||||
|
return fmt.Errorf("setup IPC %s", err)
|
||||||
|
}
|
||||||
if err := setupNetwork(container, networkState); err != nil {
|
if err := setupNetwork(container, networkState); err != nil {
|
||||||
return fmt.Errorf("setup networking %s", err)
|
return fmt.Errorf("setup networking %s", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue