25035515 docker run --link is not doing its job
authorshreya.jain@oracle.com <shreya.jain@oracle.com>
Tue, 15 Nov 2016 12:27:20 -0800
changeset 7307 d01419ab9198
parent 7306 908d5ebe04e4
child 7308 69f1f375673e
25035515 docker run --link is not doing its job
components/docker/patches/0001-Solaris-v1.10.3.patch
--- a/components/docker/patches/0001-Solaris-v1.10.3.patch	Tue Nov 15 12:09:10 2016 -0800
+++ b/components/docker/patches/0001-Solaris-v1.10.3.patch	Tue Nov 15 12:27:20 2016 -0800
@@ -1,6 +1,6 @@
-From 501b0bd8316d8ee28f0bcf7365965547c60f0638 Mon Sep 17 00:00:00 2001
+From 0102118524dffdc2917fafac5feeb2e410fd393e Mon Sep 17 00:00:00 2001
 From: Shreya Jain <[email protected]>
-Date: Tue, 8 Nov 2016 13:26:30 -0800
+Date: Tue, 15 Nov 2016 10:53:53 -0800
 Subject: [PATCH] Solaris-v1.10.3
 
 ---
@@ -23,7 +23,7 @@
  daemon/config_test.go                              |   30 +-
  daemon/container_operations_solaris.go             |  973 ++++++++++++++++++
  daemon/daemon.go                                   |    6 +-
- daemon/daemon_solaris.go                           |  544 ++++++++++
+ daemon/daemon_solaris.go                           |  576 +++++++++++
  daemon/daemon_test.go                              |    2 +
  daemon/daemon_unix_test.go                         |    2 +-
  daemon/daemon_unsupported.go                       |    2 +-
@@ -197,7 +197,7 @@
  vendor/src/gopkg.in/fsnotify.v1/fsnotify.go        |    2 +-
  volume/local/local_unix.go                         |    2 +-
  volume/store/store_unix.go                         |    2 +-
- 193 files changed, 9176 insertions(+), 1241 deletions(-)
+ 193 files changed, 9208 insertions(+), 1241 deletions(-)
  create mode 100644 Dockerfile.solaris
  create mode 100644 container/container_solaris.go
  create mode 100644 container/state_solaris.go
@@ -2557,10 +2557,10 @@
  // Run uses the execution driver to run a given container
 diff --git a/daemon/daemon_solaris.go b/daemon/daemon_solaris.go
 new file mode 100644
-index 0000000..ebec5ad
+index 0000000..a73cbb8
 --- /dev/null
 +++ b/daemon/daemon_solaris.go
-@@ -0,0 +1,544 @@
+@@ -0,0 +1,576 @@
 +// +build solaris,cgo
 +
 +package daemon
@@ -2581,6 +2581,7 @@
 +	"github.com/docker/docker/pkg/sysinfo"
 +	"github.com/docker/docker/reference"
 +	"github.com/docker/docker/runconfig"
++	runconfigopts "github.com/docker/docker/runconfig/opts"
 +	containertypes "github.com/docker/engine-api/types/container"
 +	"github.com/docker/libnetwork"
 +	nwconfig "github.com/docker/libnetwork/config"
@@ -3078,7 +3079,38 @@
 +// registerLinks sets up links between containers and writes the
 +// configuration out for persistence.
 +func (daemon *Daemon) registerLinks(container *container.Container, hostConfig *containertypes.HostConfig) error {
-+	return nil
++	if hostConfig == nil || hostConfig.NetworkMode.IsUserDefined() {
++		return nil
++	}
++
++	for _, l := range hostConfig.Links {
++		name, alias, err := runconfigopts.ParseLink(l)
++		if err != nil {
++			return err
++		}
++		child, err := daemon.GetContainer(name)
++		if err != nil {
++			//An error from daemon.GetContainer() means this name could not be found
++			return fmt.Errorf("Could not get container for %s", name)
++		}
++		for child.HostConfig.NetworkMode.IsContainer() {
++			parts := strings.SplitN(string(child.HostConfig.NetworkMode), ":", 2)
++			child, err = daemon.GetContainer(parts[1])
++			if err != nil {
++				return fmt.Errorf("Could not get container for %s", parts[1])
++			}
++		}
++		if child.HostConfig.NetworkMode.IsHost() {
++			return runconfig.ErrConflictHostNetworkAndLinks
++		}
++		if err := daemon.registerLink(container, child, alias); err != nil {
++			return err
++		}
++	}
++
++	// After we load all the links into the daemon
++	// set them to nil on the hostconfig
++	return container.WriteHostConfig()
 +}
 +
 +func (daemon *Daemon) cleanupMounts() error {