code: func (engine *DockerTaskEngine) transitionContainer(task *apitask.Task, container *apicontainer.Container, to apicontainerstatus.ContainerStatus) {
  	// Let docker events operate async so that we can continue to handle ACS / other requests
  	// This is safe because 'applyContainerState' will not mutate the task
  	metadata := engine.applyContainerState(task, container, to)
  
  	engine.tasksLock.RLock()
  	managedTask, ok := engine.managedTasks[task.Arn]
  	engine.tasksLock.RUnlock()
  	if ok {
  		managedTask.emitDockerContainerChange(dockerContainerChange{
  			container: container,
  			event: dockerapi.DockerContainerChangeEvent{
  				Status:                  to,
  				DockerContainerMetadata: metadata,
  			},
  		})
  	}
  }
docs: // transitionContainer calls applyContainerState, and then notifies the managed
  // task of the change. transitionContainer is called by progressTask and
  // by handleStoppedToRunningContainerTransition.