func (c *Container) hostConfig(app provision.App, isDeploy bool) (*docker.HostConfig, error) { sharedBasedir, _ := config.GetString("docker:sharedfs:hostdir") sharedMount, _ := config.GetString("docker:sharedfs:mountpoint") sharedIsolation, _ := config.GetBool("docker:sharedfs:app-isolation") sharedSalt, _ := config.GetString("docker:sharedfs:salt") hostConfig := docker.HostConfig{ CPUShares: int64(app.GetCpuShare()), } if !isDeploy { hostConfig.Memory = app.GetMemory() hostConfig.MemorySwap = app.GetMemory() + app.GetSwap() hostConfig.RestartPolicy = docker.AlwaysRestart() hostConfig.PortBindings = map[docker.Port][]docker.PortBinding{ docker.Port(c.ExposedPort): {{HostIP: "", HostPort: ""}}, } pool := app.GetPool() driver, opts, logErr := LogOpts(pool) if logErr != nil { return nil, logErr } hostConfig.LogConfig = docker.LogConfig{ Type: driver, Config: opts, } } else { hostConfig.OomScoreAdj = 1000 } hostConfig.SecurityOpt, _ = config.GetList("docker:security-opts") if sharedBasedir != "" && sharedMount != "" { if sharedIsolation { var appHostDir string if sharedSalt != "" { h := crypto.SHA1.New() io.WriteString(h, sharedSalt+c.AppName) appHostDir = fmt.Sprintf("%x", h.Sum(nil)) } else { appHostDir = c.AppName } hostConfig.Binds = append(hostConfig.Binds, fmt.Sprintf("%s/%s:%s:rw", sharedBasedir, appHostDir, sharedMount)) } else { hostConfig.Binds = append(hostConfig.Binds, fmt.Sprintf("%s:%s:rw", sharedBasedir, sharedMount)) } } return &hostConfig, nil }
func (c *container) start(p *dockerProvisioner, app provision.App, isDeploy bool) error { port, err := getPort() if err != nil { return err } sharedBasedir, _ := config.GetString("docker:sharedfs:hostdir") sharedMount, _ := config.GetString("docker:sharedfs:mountpoint") sharedIsolation, _ := config.GetBool("docker:sharedfs:app-isolation") sharedSalt, _ := config.GetString("docker:sharedfs:salt") hostConfig := docker.HostConfig{ Memory: app.GetMemory(), MemorySwap: app.GetMemory() + app.GetSwap(), CPUShares: int64(app.GetCpuShare()), } if !isDeploy { hostConfig.RestartPolicy = docker.AlwaysRestart() hostConfig.PortBindings = map[docker.Port][]docker.PortBinding{ docker.Port(port + "/tcp"): {{HostIP: "", HostPort: ""}}, } hostConfig.LogConfig = docker.LogConfig{ Type: "syslog", Config: map[string]string{ "syslog-address": fmt.Sprintf("udp://localhost:%d", getBsSysLogPort()), }, } } hostConfig.SecurityOpt, _ = config.GetList("docker:security-opts") if sharedBasedir != "" && sharedMount != "" { if sharedIsolation { var appHostDir string if sharedSalt != "" { h := crypto.SHA1.New() io.WriteString(h, sharedSalt+c.AppName) appHostDir = fmt.Sprintf("%x", h.Sum(nil)) } else { appHostDir = c.AppName } hostConfig.Binds = append(hostConfig.Binds, fmt.Sprintf("%s/%s:%s:rw", sharedBasedir, appHostDir, sharedMount)) } else { hostConfig.Binds = append(hostConfig.Binds, fmt.Sprintf("%s:%s:rw", sharedBasedir, sharedMount)) } } err = p.getCluster().StartContainer(c.ID, &hostConfig) if err != nil { return err } initialStatus := provision.StatusStarting.String() if isDeploy { initialStatus = provision.StatusBuilding.String() } return c.setStatus(p, initialStatus, false) }