Exemple #1
0
def run_container(
    container,
    userns,
    shoebox_dir,
    command,
    entrypoint,
    user=None,
    workdir=None,
    rm=False,
    private_net=None,
    links=None,
    env=None,
):
    namespace = ContainerNamespace(
        container.filesystem(), userns, private_net, hostname=container.metadata.hostname, links=links
    )

    if entrypoint is None:
        entrypoint = container.metadata.entrypoint or []
    else:
        entrypoint = [entrypoint]

    if not command:
        command = container.metadata.command or []

    command = list(entrypoint) + list(command)
    if not command:
        command = ["bash"]

    context = container.metadata.context
    if user:
        # noinspection PyProtectedMember
        context = context._replace(user=user)
    if workdir:
        # noinspection PyProtectedMember
        context = context._replace(workdir=workdir)

    environ = context.environ
    if "TERM" in os.environ:
        environ["TERM"] = os.environ["TERM"]
    if "LANG" in os.environ:
        environ["LANG"] = os.environ["LANG"]

    for l in links:
        environ.update(l.environ())

    if env:
        for var in env:
            k, v = var.split("=", 1)
            environ[k] = v

    container.write_pidfile()
    if private_net and private_net.ip_address:
        container.write_ip_address(private_net.ip_address)
    try:
        namespace.run(exec_in_namespace, context, command)
        if rm:
            remove_container(shoebox_dir, container.container_id, userns, False)
    finally:
        container.cleanup_runtime_files()
Exemple #2
0
def run_container(container,
                  userns,
                  shoebox_dir,
                  command,
                  entrypoint,
                  user=None,
                  workdir=None,
                  rm=False,
                  private_net=None,
                  links=None,
                  env=None):
    namespace = ContainerNamespace(container.filesystem(),
                                   userns,
                                   private_net,
                                   hostname=container.metadata.hostname,
                                   links=links)

    if entrypoint is None:
        entrypoint = container.metadata.entrypoint or []
    else:
        entrypoint = [entrypoint]

    if not command:
        command = container.metadata.command or []

    command = list(entrypoint) + list(command)
    if not command:
        command = ['bash']

    context = container.metadata.context
    if user:
        # noinspection PyProtectedMember
        context = context._replace(user=user)
    if workdir:
        # noinspection PyProtectedMember
        context = context._replace(workdir=workdir)

    environ = context.environ
    if 'TERM' in os.environ:
        environ['TERM'] = os.environ['TERM']
    if 'LANG' in os.environ:
        environ['LANG'] = os.environ['LANG']

    for l in links:
        environ.update(l.environ())

    if env:
        for var in env:
            k, v = var.split('=', 1)
            environ[k] = v

    container.write_pidfile()
    if private_net and private_net.ip_address:
        container.write_ip_address(private_net.ip_address)
    try:
        namespace.run(exec_in_namespace, context, command)
        if rm:
            remove_container(shoebox_dir, container.container_id, userns,
                             False)
    finally:
        container.cleanup_runtime_files()
Exemple #3
0
def rm(obj, container_id, target_uid, target_gid, volumes):
    shoebox_dir = obj['shoebox_repo']
    userns = UserNamespace(target_uid, target_gid)
    for container in container_id:
        remove_container(shoebox_dir, container, userns, volumes)
Exemple #4
0
def rm(obj, container_id, target_uid, target_gid, volumes):
    shoebox_dir = obj['shoebox_repo']
    userns = UserNamespace(target_uid, target_gid)
    for container in container_id:
        remove_container(shoebox_dir, container, userns, volumes)