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

Support networkless containers with new docker run option '-n'

This commit is contained in:
Stefan Praszalowicz 2013-07-21 17:11:47 -07:00
parent e3be2e959b
commit 3342bdb331
4 changed files with 93 additions and 37 deletions

View file

@ -77,6 +77,7 @@ type Config struct {
Volumes map[string]struct{}
VolumesFrom string
Entrypoint []string
NetworkEnabled bool
}
type HostConfig struct {
@ -106,6 +107,7 @@ func ParseRun(args []string, capabilities *Capabilities) (*Config, *HostConfig,
flTty := cmd.Bool("t", false, "Allocate a pseudo-tty")
flMemory := cmd.Int64("m", 0, "Memory limit (in bytes)")
flContainerIDFile := cmd.String("cidfile", "", "Write the container ID to the file")
flNetwork := cmd.Bool("n", true, "Enable networking for this container")
if capabilities != nil && *flMemory > 0 && !capabilities.MemoryLimit {
//fmt.Fprintf(stdout, "WARNING: Your kernel does not support memory limit capabilities. Limitation discarded.\n")
@ -178,6 +180,7 @@ func ParseRun(args []string, capabilities *Capabilities) (*Config, *HostConfig,
PortSpecs: flPorts,
User: *flUser,
Tty: *flTty,
NetworkEnabled: *flNetwork,
OpenStdin: *flStdin,
Memory: *flMemory,
CpuShares: *flCpuShares,
@ -626,7 +629,9 @@ func (container *Container) Start(hostConfig *HostConfig) error {
}
// Networking
if container.Config.NetworkEnabled {
params = append(params, "-g", container.network.Gateway.String())
}
// User
if container.Config.User != "" {
@ -727,6 +732,10 @@ func (container *Container) StderrPipe() (io.ReadCloser, error) {
}
func (container *Container) allocateNetwork() error {
if !container.Config.NetworkEnabled {
return nil
}
iface, err := container.runtime.networkManager.Allocate()
if err != nil {
return err
@ -753,6 +762,9 @@ func (container *Container) allocateNetwork() error {
}
func (container *Container) releaseNetwork() {
if !container.Config.NetworkEnabled {
return
}
container.network.Release()
container.network = nil
container.NetworkSettings = &NetworkSettings{}

View file

@ -1251,3 +1251,41 @@ func TestRestartWithVolumes(t *testing.T) {
t.Fatalf("Expected volume path: %s Actual path: %s", expected, actual)
}
}
func TestOnlyLoopbackExistsWhenUsingDisableNetworkOption(t *testing.T) {
runtime := mkRuntime(t)
defer nuke(runtime)
config, hc, _, err := ParseRun([]string{"-n=false", GetTestImage(runtime).ID, "ip", "addr", "show"}, nil)
if err != nil {
t.Fatal(err)
}
c, err := NewBuilder(runtime).Create(config)
if err != nil {
t.Fatal(err)
}
stdout, err := c.StdoutPipe()
if err != nil {
t.Fatal(err)
}
defer runtime.Destroy(c)
if err := c.Start(hc); err != nil {
t.Fatal(err)
}
c.WaitTimeout(500 * time.Millisecond)
c.Wait()
output, err := ioutil.ReadAll(stdout)
if err != nil {
t.Fatal(err)
}
interfaces := regexp.MustCompile(`(?m)^[0-9]+: [a-zA-Z0-9]+`).FindAllString(string(output), -1)
if len(interfaces) != 1 {
t.Fatalf("Wrong interface count in test container: expected [1: lo], got [%s]", interfaces)
}
if interfaces[0] != "1: lo" {
t.Fatalf("Wrong interface in test container: expected [1: lo], got [%s]", interfaces)
}
}

View file

@ -20,6 +20,7 @@
-h="": Container host name
-i=false: Keep stdin open even if not attached
-m=0: Memory limit (in bytes)
-n=true: Enable networking for this container
-p=[]: Map a network port to the container
-t=false: Allocate a pseudo-tty
-u="": Username or UID

View file

@ -13,6 +13,7 @@ lxc.utsname = {{.Id}}
{{end}}
#lxc.aa_profile = unconfined
{{if .Config.NetworkEnabled}}
# network configuration
lxc.network.type = veth
lxc.network.flags = up
@ -20,6 +21,10 @@ lxc.network.link = {{.NetworkSettings.Bridge}}
lxc.network.name = eth0
lxc.network.mtu = 1500
lxc.network.ipv4 = {{.NetworkSettings.IPAddress}}/{{.NetworkSettings.IPPrefixLen}}
{{else}}
# Network configuration disabled
lxc.network.type = empty
{{end}}
# root filesystem
{{$ROOTFS := .RootfsPath}}