diff options
author | Alexander Morozov <lk4d4@docker.com> | 2015-03-31 09:34:03 -0700 |
---|---|---|
committer | Jessica Frazelle <jess@docker.com> | 2015-03-31 14:00:02 -0700 |
commit | 3be7d11cee7607b35c3bd7b1b8fd20895d593dbe (patch) | |
tree | 0a66bfed20f03ae2a05cd9da06e0835f6127358f | |
parent | d9910b8fd83b3eeef5ce8d27170df088d896a9b8 (diff) | |
download | docker-3be7d11cee7607b35c3bd7b1b8fd20895d593dbe.tar.gz |
Initialize portMapper in RequestPort too
Api requesting port for daemon before init_networkdriver called.
Problem is that now initialization of api depends on initialization of
daemon and their intializations runs in parallel. Proper fix will be
just do it sequentially. For now I don't want refactor it, because it
can bring additional problems in 1.6.0.
Signed-off-by: Alexander Morozov <lk4d4@docker.com>
(cherry picked from commit 584180fce7ad11516a256b8abd4621138337e918)
Docker-DCO-1.1-Signed-off-by: Jessie Frazelle <princess@docker.com> (github: jfrazelle)
Docker-DCO-1.1-Signed-off-by: Jessie Frazelle <jess@docker.com> (github: jfrazelle)
-rw-r--r-- | daemon/networkdriver/bridge/driver.go | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/daemon/networkdriver/bridge/driver.go b/daemon/networkdriver/bridge/driver.go index c2582701a3..0d6bc07167 100644 --- a/daemon/networkdriver/bridge/driver.go +++ b/daemon/networkdriver/bridge/driver.go @@ -78,11 +78,18 @@ var ( bridgeIPv6Addr net.IP globalIPv6Network *net.IPNet portMapper *portmapper.PortMapper + once sync.Once defaultBindingIP = net.ParseIP("0.0.0.0") currentInterfaces = ifaces{c: make(map[string]*networkInterface)} ) +func initPortMapper() { + once.Do(func() { + portMapper = portmapper.New() + }) +} + func InitDriver(job *engine.Job) engine.Status { var ( networkv4 *net.IPNet @@ -99,7 +106,7 @@ func InitDriver(job *engine.Job) engine.Status { fixedCIDR = job.Getenv("FixedCIDR") fixedCIDRv6 = job.Getenv("FixedCIDRv6") ) - portMapper = portmapper.New() + initPortMapper() if defaultIP := job.Getenv("DefaultBindingIP"); defaultIP != "" { defaultBindingIP = net.ParseIP(defaultIP) @@ -352,6 +359,7 @@ func setupIPTables(addr net.Addr, icc, ipmasq bool) error { } func RequestPort(ip net.IP, proto string, port int) (int, error) { + initPortMapper() return portMapper.Allocator.RequestPort(ip, proto, port) } |