mirror of https://github.com/docker/docs.git
HostConfig for /start endpoint
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
2ce00c6ce9
commit
b05dee4d6e
|
|
@ -749,7 +749,27 @@ func postContainersStart(c *context, w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
if err := c.cluster.StartContainer(container); err != nil {
|
||||
hostConfig := &dockerclient.HostConfig{
|
||||
MemorySwappiness: -1,
|
||||
}
|
||||
|
||||
buf, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
httpError(w, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
r.Body.Close()
|
||||
|
||||
if len(buf) <= 2 {
|
||||
hostConfig = nil
|
||||
} else {
|
||||
if err := json.Unmarshal(buf, hostConfig); err != nil {
|
||||
httpError(w, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if err := c.cluster.StartContainer(container, hostConfig); err != nil {
|
||||
httpError(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ type Cluster interface {
|
|||
Containers() Containers
|
||||
|
||||
// Start a container
|
||||
StartContainer(container *Container) error
|
||||
StartContainer(container *Container, hostConfig *dockerclient.HostConfig) error
|
||||
|
||||
// Return container the matching `IDOrName`
|
||||
// TODO: remove this method from the interface as we can use
|
||||
|
|
|
|||
|
|
@ -1080,8 +1080,8 @@ func (e *Engine) cleanupContainers() {
|
|||
}
|
||||
|
||||
// StartContainer starts a container
|
||||
func (e *Engine) StartContainer(id string) error {
|
||||
err := e.client.StartContainer(id, nil)
|
||||
func (e *Engine) StartContainer(id string, hostConfig *dockerclient.HostConfig) error {
|
||||
err := e.client.StartContainer(id, hostConfig)
|
||||
e.CheckConnectionErr(err)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -179,10 +179,10 @@ func (c *Cluster) UnregisterEventHandler(h cluster.EventHandler) {
|
|||
}
|
||||
|
||||
// StartContainer starts a container
|
||||
func (c *Cluster) StartContainer(container *cluster.Container) error {
|
||||
func (c *Cluster) StartContainer(container *cluster.Container, hostConfig *dockerclient.HostConfig) error {
|
||||
// if the container was started less than a second ago in detach mode, do not start it
|
||||
if time.Now().Unix()-container.Created > 1 || container.Config.Labels[cluster.SwarmLabelNamespace+".mesos.detach"] != "true" {
|
||||
return container.Engine.StartContainer(container.Id)
|
||||
return container.Engine.StartContainer(container.Id, hostConfig)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,8 +125,8 @@ func (c *Cluster) generateUniqueID() string {
|
|||
}
|
||||
|
||||
// StartContainer starts a container
|
||||
func (c *Cluster) StartContainer(container *cluster.Container) error {
|
||||
return container.Engine.StartContainer(container.Id)
|
||||
func (c *Cluster) StartContainer(container *cluster.Container, hostConfig *dockerclient.HostConfig) error {
|
||||
return container.Engine.StartContainer(container.Id, hostConfig)
|
||||
}
|
||||
|
||||
// CreateContainer aka schedule a brand new container into the cluster.
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ func (w *Watchdog) rescheduleContainers(e *Engine) {
|
|||
log.Infof("Rescheduled container %s from %s to %s as %s", c.Id, c.Engine.Name, newContainer.Engine.Name, newContainer.Id)
|
||||
if c.Info.State.Running {
|
||||
log.Infof("Container %s was running, starting container %s", c.Id, newContainer.Id)
|
||||
if err := w.cluster.StartContainer(newContainer); err != nil {
|
||||
if err := w.cluster.StartContainer(newContainer, nil); err != nil {
|
||||
log.Errorf("Failed to start rescheduled container %s", newContainer.Id)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,3 +25,26 @@ function teardown() {
|
|||
# Verify
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
}
|
||||
|
||||
@test "docker start with hostConfig" {
|
||||
start_docker_with_busybox 2
|
||||
swarm_manage
|
||||
# create
|
||||
docker_swarm create --name test_container busybox sleep 1000
|
||||
|
||||
# make sure created container exists
|
||||
# new created container has no status
|
||||
run docker_swarm ps -l
|
||||
[ "${#lines[@]}" -eq 2 ]
|
||||
[[ "${lines[1]}" == *"test_container"* ]]
|
||||
|
||||
# start
|
||||
curl -s -H "Content-Type: application/json" -X POST -d '{"PublishAllPorts": true}' ${SWARM_HOSTS[0]}/v1.23/containers/test_container/start
|
||||
|
||||
# Verify
|
||||
[ -n $(docker_swarm ps -q --filter=name=test_container --filter=status=running) ]
|
||||
|
||||
# Inspect HostConfig of container, should have PublishAllPorts set to true
|
||||
run docker_swarm inspect test_container
|
||||
[[ "${output}" == *'"PublishAllPorts": true'* ]]
|
||||
}
|
||||
Loading…
Reference in New Issue