func configureDataContainer(srv *def.Service, ops *def.Operation, mainContOpts *docker.CreateContainerOptions) (docker.CreateContainerOptions, error) { // by default data containers will rely on the image used by // the base service. sometimes, tho, especially for testing // that base image will not be present. in such cases use // the base eris data container. if srv.Image == "" { srv.Image = "eris/data" } opts := docker.CreateContainerOptions{ Name: ops.DataContainerName, Config: &docker.Config{ Image: srv.Image, User: srv.User, AttachStdin: false, AttachStdout: false, AttachStderr: false, Tty: false, OpenStdin: false, NetworkDisabled: true, // data containers do not need to talk to the outside world. Entrypoint: []string{}, Cmd: []string{"false"}, // just gracefully exit. data containers just need to "exist" not run. }, HostConfig: &docker.HostConfig{}, } if mainContOpts != nil { mainContOpts.HostConfig.VolumesFrom = append(mainContOpts.HostConfig.VolumesFrom, ops.DataContainerName) } return opts, nil }
func configureDataContainer(srv *def.Service, ops *def.Operation, mainContOpts *docker.CreateContainerOptions) (docker.CreateContainerOptions, error) { // by default data containers will rely on the image used by // the base service. sometimes, tho, especially for testing // that base image will not be present. in such cases use // the base eris data container. if srv.Image == "" { srv.Image = "quay.io/eris/data" } // Manipulate labels locally. labels := make(map[string]string) for k, v := range ops.Labels { labels[k] = v } // If connected to a service. if mainContOpts != nil { // Set the service container's VolumesFrom pointing to the data container. mainContOpts.HostConfig.VolumesFrom = append(mainContOpts.HostConfig.VolumesFrom, ops.DataContainerName) // Operations are inherited from the service container. labels = util.SetLabel(labels, def.LabelType, def.TypeData) // Set the data container service label pointing to the service. labels = util.SetLabel(labels, def.LabelService, mainContOpts.Name) } opts := docker.CreateContainerOptions{ Name: ops.DataContainerName, Config: &docker.Config{ Image: srv.Image, User: srv.User, AttachStdin: false, AttachStdout: false, AttachStderr: false, Tty: false, OpenStdin: false, Labels: labels, // Data containers do not need to talk to the outside world. NetworkDisabled: true, // Just gracefully exit. Data containers just need to "exist" not run. Entrypoint: []string{"true"}, Cmd: []string{}, }, HostConfig: &docker.HostConfig{}, } return opts, nil }