func parseDockerContainerMetadata(taskARN string, containerName string, dockerContainer *types.ContainerJSON) DockerContainerMetadata {
	if dockerContainer == nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: container metadata not available or does not exist", taskARN, containerName)
		return DockerContainerMetadata{}
	}

	// In most cases a container should never lack a config but we check regardless to avoid
	// nil pointer exceptions (Could occur if there is some error in the docker api call, if the
	// container we receive has incomplete information)
	imageNameFromConfig := ""
	if dockerContainer.Config != nil {
		imageNameFromConfig = dockerContainer.Config.Image
	} else {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: container has no configuration", taskARN, containerName)
	}

	if dockerContainer.ContainerJSONBase == nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: container has no host configuration", taskARN, containerName)
		return DockerContainerMetadata{
			imageName: imageNameFromConfig,
		}
	}
	networkMetadata, err := parseNetworkMetadata(dockerContainer.NetworkSettings, dockerContainer.HostConfig)

	if err != nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: %v", taskARN, containerName, err)
	}

	// Get Port bindings from NetworkSettings
	var ports []apicontainer.PortBinding
	ports, err = apicontainer.PortBindingFromDockerPortBinding(dockerContainer.NetworkSettings.Ports)
	if err != nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: %v", taskARN, containerName, err)
	}

	return DockerContainerMetadata{
		containerID:         dockerContainer.ID,
		dockerContainerName: dockerContainer.Name,
		imageID:             dockerContainer.Image,
		imageName:           imageNameFromConfig,
		ports:               ports,
		networkInfo:         networkMetadata,
	}
}
func parseDockerContainerMetadata(taskARN string, containerName string, dockerContainer *types.ContainerJSON) DockerContainerMetadata {
	if dockerContainer == nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: container metadata not available or does not exist", taskARN, containerName)
		return DockerContainerMetadata{}
	}

	
	
	
	imageNameFromConfig := ""
	if dockerContainer.Config != nil {
		imageNameFromConfig = dockerContainer.Config.Image
	} else {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: container has no configuration", taskARN, containerName)
	}

	if dockerContainer.ContainerJSONBase == nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: container has no host configuration", taskARN, containerName)
		return DockerContainerMetadata{
			imageName: imageNameFromConfig,
		}
	}
	networkMetadata, err := parseNetworkMetadata(dockerContainer.NetworkSettings, dockerContainer.HostConfig)

	if err != nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: %v", taskARN, containerName, err)
	}

	
	var ports []apicontainer.PortBinding
	ports, err = apicontainer.PortBindingFromDockerPortBinding(dockerContainer.NetworkSettings.Ports)
	if err != nil {
		seelog.Warnf("Failed to parse container metadata for task %s container %s: %v", taskARN, containerName, err)
	}

	return DockerContainerMetadata{
		containerID:         dockerContainer.ID,
		dockerContainerName: dockerContainer.Name,
		imageID:             dockerContainer.Image,
		imageName:           imageNameFromConfig,
		ports:               ports,
		networkInfo:         networkMetadata,
	}
}
func parseDockerContainerMetadata ( taskARN string , containerName string , dockerContainer * types . ContainerJSON ) DockerContainerMetadata { if dockerContainer == nil { seelog . Warnf ( " " , taskARN , containerName ) return DockerContainerMetadata { } } // In most cases a container should never lack a config but we check regardless to avoid // nil pointer exceptions (Could occur if there is some error in the docker api call, if the // container we receive has incomplete information) imageNameFromConfig := " " if dockerContainer . Config != nil { imageNameFromConfig = dockerContainer . Config . Image } else { seelog . Warnf ( " " , taskARN , containerName ) } if dockerContainer . ContainerJSONBase == nil { seelog . Warnf ( " " , taskARN , containerName ) return DockerContainerMetadata { imageName : imageNameFromConfig , } } networkMetadata , err := parseNetworkMetadata ( dockerContainer . NetworkSettings , dockerContainer . HostConfig ) if err != nil { seelog . Warnf ( " " , taskARN , containerName , err ) } // Get Port bindings from NetworkSettings var ports [ ] apicontainer . PortBinding ports , err = apicontainer . PortBindingFromDockerPortBinding ( dockerContainer . NetworkSettings . Ports ) if err != nil { seelog . Warnf ( " " , taskARN , containerName , err ) } return DockerContainerMetadata { containerID : dockerContainer . ID , dockerContainerName : dockerContainer . Name , imageID : dockerContainer . Image , imageName : imageNameFromConfig , ports : ports , networkInfo : networkMetadata , } }
// parseDockerContainerMetadata parses the metadata in a docker container
// and packages this data for JSON marshaling
// Since we accept incomplete metadata fields, we should not return
// errors here and handle them at this stage.
parseDockerContainerMetadata parses the metadata in a docker container and packages this data for JSON marshaling Since we accept incomplete metadata fields we should not return errors here and handle them at this stage .