From a785882b29b9f0b24ace8249576c5d8d7f8c1d94 Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 2 May 2014 14:17:31 -0700 Subject: [PATCH] Setup host networking for lxc and native Docker-DCO-1.1-Signed-off-by: Michael Crosby (github: crosbymichael) --- daemon/container.go | 2 ++ daemon/execdriver/driver.go | 7 ++++--- daemon/execdriver/lxc/init.go | 9 +++++---- daemon/execdriver/lxc/lxc_template.go | 5 +++-- daemon/execdriver/native/create.go | 5 ++++- runconfig/parse.go | 2 ++ 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/daemon/container.go b/daemon/container.go index bbd4aa6a58..6769da9b25 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -341,6 +341,8 @@ func populateCommand(c *Container, env []string) error { parts := strings.SplitN(c.hostConfig.NetworkMode, ":", 2) switch parts[0] { case "none": + case "host": + en.HostNetworking = true case "bridge": if !c.Config.NetworkDisabled { network := c.NetworkSettings diff --git a/daemon/execdriver/driver.go b/daemon/execdriver/driver.go index 994a27e501..4837a398ea 100644 --- a/daemon/execdriver/driver.go +++ b/daemon/execdriver/driver.go @@ -89,9 +89,10 @@ type Driver interface { // Network settings of the container type Network struct { - Interface *NetworkInterface `json:"interface"` // if interface is nil then networking is disabled - Mtu int `json:"mtu"` - ContainerID string `json:"container_id"` // id of the container to join network. + Interface *NetworkInterface `json:"interface"` // if interface is nil then networking is disabled + Mtu int `json:"mtu"` + ContainerID string `json:"container_id"` // id of the container to join network. + HostNetworking bool `json:"host_networking"` } type NetworkInterface struct { diff --git a/daemon/execdriver/lxc/init.go b/daemon/execdriver/lxc/init.go index 52d75fc9f8..e21e717645 100644 --- a/daemon/execdriver/lxc/init.go +++ b/daemon/execdriver/lxc/init.go @@ -3,15 +3,16 @@ package lxc import ( "encoding/json" "fmt" - "github.com/dotcloud/docker/daemon/execdriver" - "github.com/dotcloud/docker/pkg/netlink" - "github.com/dotcloud/docker/pkg/user" - "github.com/syndtr/gocapability/capability" "io/ioutil" "net" "os" "strings" "syscall" + + "github.com/dotcloud/docker/daemon/execdriver" + "github.com/dotcloud/docker/pkg/netlink" + "github.com/dotcloud/docker/pkg/user" + "github.com/syndtr/gocapability/capability" ) // Clear environment pollution introduced by lxc-start diff --git a/daemon/execdriver/lxc/lxc_template.go b/daemon/execdriver/lxc/lxc_template.go index 19fa43c4c2..7fdc5ce92b 100644 --- a/daemon/execdriver/lxc/lxc_template.go +++ b/daemon/execdriver/lxc/lxc_template.go @@ -14,12 +14,13 @@ const LxcTemplate = ` lxc.network.type = veth lxc.network.link = {{.Network.Interface.Bridge}} lxc.network.name = eth0 -{{else}} +lxc.network.mtu = {{.Network.Mtu}} +{{else if not .Network.HostNetworking}} # network is disabled (-n=false) lxc.network.type = empty lxc.network.flags = up -{{end}} lxc.network.mtu = {{.Network.Mtu}} +{{end}} # root filesystem {{$ROOTFS := .Rootfs}} diff --git a/daemon/execdriver/native/create.go b/daemon/execdriver/native/create.go index b2dd395bb5..5070ef7838 100644 --- a/daemon/execdriver/native/create.go +++ b/daemon/execdriver/native/create.go @@ -53,6 +53,10 @@ func (d *driver) createContainer(c *execdriver.Command) (*libcontainer.Container } func (d *driver) createNetwork(container *libcontainer.Container, c *execdriver.Command) error { + if c.Network.HostNetworking { + container.Namespaces.Get("NEWNET").Enabled = false + return nil + } container.Networks = []*libcontainer.Network{ { Mtu: c.Network.Mtu, @@ -90,7 +94,6 @@ func (d *driver) createNetwork(container *libcontainer.Container, c *execdriver. }, }) } - return nil } diff --git a/runconfig/parse.go b/runconfig/parse.go index 42ad5c1958..eb9886bb97 100644 --- a/runconfig/parse.go +++ b/runconfig/parse.go @@ -292,6 +292,8 @@ func parseNetMode(netMode string) (string, error) { return "", fmt.Errorf("'container:' netmode requires a container id or name", netMode) } return netMode, nil + case "host": + return netMode, nil default: return "", fmt.Errorf("invalid netmode: %q", netMode) }