Example #1
0
def test_docker_inspect():
    docker = DockerClient()
    container = docker.run('selenium/hub:2.53.0', name='selenium-hub')
    pprint(docker.inspect(container))
Example #2
0
class DockerContainer(object):
    def __init__(self, image_name, version, container_name):
        self._docker = DockerClient()
        self._config = ContainerConfig(image_name=image_name,
                                       version=version,
                                       container_name=container_name)
        self._container = None

    def __enter__(self):
        return self.start()

    def __exit__(self, type, value, traceback):
        self.stop()

    def start(self):
        self._container = self._docker.run(
            image=self._config.image,
            bind_ports=self._config.port_bindings,
            env=self._config.environment,
            links=self._config.container_links,
            name=self._config.container_name,
            volumes=self._config.volumes)
        self.print_ports()
        return self

    def print_ports(self):
        logging.warning("Container port mappings {}".format(
            self.inspect()['NetworkSettings']['Ports']))

    def stop(self):
        self._docker.stop(self._container)

    def get_host_info(self, port):
        info = self._docker.port(self._container, port)
        return info[0]

    def get_host_port(self, port):
        return self.get_host_info(port)['HostPort']

    def get_host_ip(self, port):
        return self.get_host_info(port)['HostIp']

    @property
    def container_name(self):
        return self._config.container_name

    def get_env(self, key):
        return self._config.environment[key]

    def add_env(self, key, value):
        self._config.add_env(key, value)

    def bind_ports(self, host, container):
        self._config.bind_ports(host, container)

    def mount_volume(self, host, container):
        self._config.mount_volume(host, container)

    def link_containers(self, target, current):
        self._config.link_containers(target, current)

    def inspect(self):
        return self._docker.inspect(self._container)