Explorar el Código

Merge pull request #10813 from chenhanxiao/expose-warning-v2

dispatchers: warn user if try to use EXPOSE ip:hostPort:containerPort
Tibor Vass hace 10 años
padre
commit
1ff904e045
Se han modificado 2 ficheros con 36 adiciones y 1 borrados
  1. 9 1
      builder/dispatchers.go
  2. 27 0
      integration-cli/docker_cli_build_test.go

+ 9 - 1
builder/dispatchers.go

@@ -339,11 +339,19 @@ func expose(b *Builder, args []string, attributes map[string]bool, original stri
 		b.Config.ExposedPorts = make(nat.PortSet)
 	}
 
-	ports, _, err := nat.ParsePortSpecs(append(portsTab, b.Config.PortSpecs...))
+	ports, bindingMap, err := nat.ParsePortSpecs(append(portsTab, b.Config.PortSpecs...))
 	if err != nil {
 		return err
 	}
 
+	for _, bindings := range bindingMap {
+		if bindings[0].HostIp != "" || bindings[0].HostPort != "" {
+			fmt.Fprintf(b.ErrStream, " ---> Using Dockerfile's EXPOSE instruction"+
+				"      to map host ports to container ports (ip:hostPort:containerPort) is deprecated.\n"+
+				"      Please use -p to publish the ports.\n")
+		}
+	}
+
 	// instead of using ports directly, we build a list of ports and sort it so
 	// the order is consistent. This prevents cache burst where map ordering
 	// changes between builds

+ 27 - 0
integration-cli/docker_cli_build_test.go

@@ -2343,6 +2343,33 @@ func TestBuildExposeUpperCaseProto(t *testing.T) {
 	logDone("build - expose port with upper case proto")
 }
 
+func TestBuildExposeHostPort(t *testing.T) {
+	// start building docker file with ip:hostPort:containerPort
+	name := "testbuildexpose"
+	expected := "map[5678/tcp:map[]]"
+	defer deleteImages(name)
+	_, out, err := buildImageWithOut(name,
+		`FROM scratch
+        EXPOSE 192.168.1.2:2375:5678`,
+		true)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if !strings.Contains(out, "to map host ports to container ports (ip:hostPort:containerPort) is deprecated.") {
+		t.Fatal("Missing warning message")
+	}
+
+	res, err := inspectField(name, "Config.ExposedPorts")
+	if err != nil {
+		t.Fatal(err)
+	}
+	if res != expected {
+		t.Fatalf("Exposed ports %s, expected %s", res, expected)
+	}
+	logDone("build - ignore exposing host's port")
+}
+
 func TestBuildEmptyEntrypointInheritance(t *testing.T) {
 	name := "testbuildentrypointinheritance"
 	name2 := "testbuildentrypointinheritance2"