Explorar o código

Hotfix: Migrate public mappings after upgrade

Michael Crosby %!s(int64=11) %!d(string=hai) anos
pai
achega
79bf2c2b0e
Modificáronse 2 ficheiros con 12 adicións e 5 borrados
  1. 4 1
      container.go
  2. 8 4
      utils.go

+ 4 - 1
container.go

@@ -1054,10 +1054,13 @@ func (container *Container) allocateNetwork(hostConfig *HostConfig) error {
 
 	if container.Config.PortSpecs != nil {
 		utils.Debugf("Migrating port mappings for container: %s", strings.Join(container.Config.PortSpecs, ", "))
-		if err := migratePortMappings(container.Config); err != nil {
+		if err := migratePortMappings(container.Config, hostConfig); err != nil {
 			return err
 		}
 		container.Config.PortSpecs = nil
+		if err := container.SaveHostConfig(hostConfig); err != nil {
+			return err
+		}
 	}
 
 	portSpecs := make(map[Port]struct{})

+ 8 - 4
utils.go

@@ -265,15 +265,19 @@ func parsePort(rawPort string) (int, error) {
 	return int(port), nil
 }
 
-func migratePortMappings(config *Config) error {
+func migratePortMappings(config *Config, hostConfig *HostConfig) error {
 	if config.PortSpecs != nil {
-		// We don't have to worry about migrating the bindings to the host
-		// This is our breaking change
-		ports, _, err := parsePortSpecs(config.PortSpecs)
+		ports, bindings, err := parsePortSpecs(config.PortSpecs)
 		if err != nil {
 			return err
 		}
 		config.PortSpecs = nil
+		if len(bindings) > 0 {
+			if hostConfig == nil {
+				hostConfig = &HostConfig{}
+			}
+			hostConfig.PortBindings = bindings
+		}
 
 		if config.ExposedPorts == nil {
 			config.ExposedPorts = make(map[Port]struct{}, len(ports))