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()
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()
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)