class_docstr: A specification of a container.
  
  The spec includes image, command line entrypoint and arguments for a
  container. For example:
  
  spec = ExecutorContainerSpec(
    image='docker/whalesay',
    command=['cowsay'],
    args=['hello wolrd'])
  
  Attributes:
    image: Container image that has executor application. Assumption is that
      this container image is separately release-managed, and tagged/versioned
      accordingly.
    command: Container entrypoint array. Not executed within a shell. The docker
      image's ENTRYPOINT is used if this is not provided. The Jinja templating
      mechanism is used for constructing a user-specified command-line
      invocation based on input and output metadata at runtime.
    args: Arguments to the container entrypoint. The docker image's CMD is used
      if this is not provided. The Jinja templating mechanism is used for
      constructing a user-specified command-line invocation based on input and
      output metadata at runtime.
class_docstr_tok: ["A","specification","of","a","container",".","The","spec","includes","image",",","command","line","entrypoint","and","arguments","for","a","container",".","For","example",":","spec","=","ExecutorContainerSpec","(","image='docker\/whalesay","'",",","command=","[","'cowsay","'","]",",","args=","[","'hello","wolrd","'","]",")","Attributes",":","image",":","Container","image","that","has","executor","application",".","Assumption","is","that","this","container","image","is","separately","release-managed",",","and","tagged\/versioned","accordingly",".","command",":","Container","entrypoint","array",".","Not","executed","within","a","shell",".","The","docker","image","'s","ENTRYPOINT","is","used","if","this","is","not","provided",".","The","Jinja","templating","mechanism","is","used","for","constructing","a","user-specified","command-line","invocation","based","on","input","and","output","metadata","at","runtime",".","args",":","Arguments","to","the","container","entrypoint",".","The","docker","image","'s","CMD","is","used","if","this","is","not","provided",".","The","Jinja","templating","mechanism","is","used","for","constructing","a","user-specified","command-line","invocation","based","on","input","and","output","metadata","at","runtime","."]
code: def __init__(
      self,
      image: str,
      command: Optional[List[str]] = None,
      args: Optional[List[str]] = None,
  ):
      if not image:
          raise ValueError("image cannot be None or empty.")
      self.image = image
      self.command = command
      self.args = args
      super().__init__()
  
imports: import copy
  from typing import cast, Iterable, List, Optional, Type, Union
  from tfx import types
  from tfx.dsl.components.base import base_executor
  from tfx.dsl.placeholder import placeholder
  from tfx.proto.orchestration import executable_spec_pb2
  from tfx.proto.orchestration import placeholder_pb2
  from tfx.utils import import_utils
  from tfx.utils import json_utils
  from tfx.utils import name_utils
  from google.protobuf import message
label_desc: Use image node_id 1 to create a new ExecutorContainerSpec object from inherited base classes: ExecutorSpec with example: obj = ExecutorContainerSpec(image, command, args)