123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import sys
- from pathlib import Path
- from metadocker.cmdline.commands.base import Command, Argument
- from metadocker.common.errors import SimpleError
- from metadocker.docker import DockerBuilder
- from metadocker.docker.driver import driver
- class RunCommand(Command):
- NAME = "run"
- HELP = "Initialise le conteneur"
- ARGUMENTS = [
- Argument("--root", "-r", action="store_true", help="Lance avec utilisateur root"),
- Argument("--interactive", "-i", action="store_true", help="Lance en mode interactif"),
- Argument("commande", nargs="*", help="Command à lancer")
- ]
- def _rm_if_needed(self, env, docker):
- for data in driver.ps(name=docker.name):
- if data.running:
- raise SimpleError(f"Erreur le conteneur '{docker.name}' est déja lancé")
- driver.rm(docker.name)
- def run(self, env):
- docker = DockerBuilder(env)
- env = env.get_env()
- self._rm_if_needed(env, docker)
- cmdline = ["-i" if self.interactive else "-d",
- #"--rm"
- ]
- if self.root:
- cmdline.extend(("-u", "0"))
- for host, container in env.PORTS.items():
- cmdline.extend(("-p", f"{host}:{container}"))
- for host, container in env.VOLUMES.items():
- host = Path(host)
- host.mkdir(exist_ok=True, parents=True)
- if not host.is_absolute():
- host = f"./{host}"
- cmdline.extend(("-v", f"{host}:{container}"))
- cmdline.extend(("--name", docker.name, "-t", docker.tag))
- cmdline.extend(self.commande)
- kwargs = {"catch": False}
- if self.interactive:
- kwargs["stdin"]=sys.stdin
- data = driver.ps(name=docker.name)
- driver.run(*cmdline, **kwargs)
|