summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Morozov <lk4d4@docker.com>2015-03-31 09:34:03 -0700
committerJessica Frazelle <jess@docker.com>2015-03-31 14:00:02 -0700
commit3be7d11cee7607b35c3bd7b1b8fd20895d593dbe (patch)
tree0a66bfed20f03ae2a05cd9da06e0835f6127358f
parentd9910b8fd83b3eeef5ce8d27170df088d896a9b8 (diff)
downloaddocker-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.go10
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)
}