浏览代码

Merge pull request #7878 from LK4D4/fix_net_for_none

Don't initialize network for 'none' mode
Tibor Vass 10 年之前
父节点
当前提交
1a2a4f61ab
共有 3 个文件被更改,包括 23 次插入1 次删除
  1. 1 1
      daemon/container.go
  2. 18 0
      integration-cli/docker_cli_run_test.go
  3. 4 0
      runconfig/hostconfig.go

+ 1 - 1
daemon/container.go

@@ -434,7 +434,7 @@ func (container *Container) buildHostnameAndHostsFiles(IP string) error {
 
 
 func (container *Container) allocateNetwork() error {
 func (container *Container) allocateNetwork() error {
 	mode := container.hostConfig.NetworkMode
 	mode := container.hostConfig.NetworkMode
-	if container.Config.NetworkDisabled || mode.IsContainer() || mode.IsHost() {
+	if container.Config.NetworkDisabled || mode.IsContainer() || mode.IsHost() || mode.IsNone() {
 		return nil
 		return nil
 	}
 	}
 
 

+ 18 - 0
integration-cli/docker_cli_run_test.go

@@ -1828,3 +1828,21 @@ func TestRunCidFileCheckIDLength(t *testing.T) {
 	deleteAllContainers()
 	deleteAllContainers()
 	logDone("run - cidfile contains long id")
 	logDone("run - cidfile contains long id")
 }
 }
+
+func TestRunNetworkNotInitializedNoneMode(t *testing.T) {
+	cmd := exec.Command(dockerBinary, "run", "-d", "--net=none", "busybox", "top")
+	out, _, err := runCommandWithOutput(cmd)
+	if err != nil {
+		t.Fatal(err)
+	}
+	id := strings.TrimSpace(out)
+	res, err := inspectField(id, "NetworkSettings.IPAddress")
+	if err != nil {
+		t.Fatal(err)
+	}
+	if res != "" {
+		t.Fatal("For 'none' mode network must not be initialized, but container got IP: %s", res)
+	}
+	deleteAllContainers()
+	logDone("run - network must not be initialized in 'none' mode")
+}

+ 4 - 0
runconfig/hostconfig.go

@@ -19,6 +19,10 @@ func (n NetworkMode) IsContainer() bool {
 	return len(parts) > 1 && parts[0] == "container"
 	return len(parts) > 1 && parts[0] == "container"
 }
 }
 
 
+func (n NetworkMode) IsNone() bool {
+	return n == "none"
+}
+
 type DeviceMapping struct {
 type DeviceMapping struct {
 	PathOnHost        string
 	PathOnHost        string
 	PathInContainer   string
 	PathInContainer   string