瀏覽代碼

Fix link doesn't work sometimes when container start with multiple networks

If there is multiple networks to connect to on container starting,
the order of these networks is random because we "range a map". But
the defautl network "bridge" should be connected first since only
"bridge" support link and we should have do some settings on sandbox
creation, and only the first connect will setting the sandbox.

Signed-off-by: Lei Jitang <leijitang@huawei.com>
Lei Jitang 9 年之前
父節點
當前提交
57c0a653e3
共有 1 個文件被更改,包括 14 次插入0 次删除
  1. 14 0
      daemon/container_operations.go

+ 14 - 0
daemon/container_operations.go

@@ -397,7 +397,21 @@ func (daemon *Daemon) allocateNetwork(container *container.Container) error {
 		updateSettings = true
 		updateSettings = true
 	}
 	}
 
 
+	// always connect default network first since only default
+	// network mode support link and we need do some setting
+	// on sanbox initialize for link, but the sandbox only be initialized
+	// on first network connecting.
+	defaultNetName := runconfig.DefaultDaemonNetworkMode().NetworkName()
+	if nConf, ok := container.NetworkSettings.Networks[defaultNetName]; ok {
+		if err := daemon.connectToNetwork(container, defaultNetName, nConf, updateSettings); err != nil {
+			return err
+		}
+
+	}
 	for n, nConf := range container.NetworkSettings.Networks {
 	for n, nConf := range container.NetworkSettings.Networks {
+		if n == defaultNetName {
+			continue
+		}
 		if err := daemon.connectToNetwork(container, n, nConf, updateSettings); err != nil {
 		if err := daemon.connectToNetwork(container, n, nConf, updateSettings); err != nil {
 			return err
 			return err
 		}
 		}