def test_run_container():
    app = app_helper.setup_app_state('sra', 'inputs')
    id_ = run.create_container(app)['Id']
    docker.client().start(id_)
    docker.client().wait(id_)
    nose.assert_equal(container.did_exit_succcessfully(id_), True)
    image_helper.clean_up_container(id_)
示例#2
0
 def __init__(self, *args, **kwargs):
     if "path" in kwargs and kwargs["path"] != "":
         self.path = kwargs["path"]
         try:
             self.dockerm = docker.client(base_url=self.path, timeout=100)
         except Exception as e:
             self.dockerm = docker.from_env()
             raise e
     else:
         self.dockerm = docker.from_env()
示例#3
0
文件: image.py 项目: ipa-pfs/dockeROS
 def make_client(self, ip=None, port=None):
     """
     Initialize a docker client either using local or remote docker deamon.
     When you give no parameters, the local enviornment is used.
     So either your local deamon or the one defined in the DOCKER_HOST environment variable.(see https://dockr.ly/2zMPc17 for details)
     (see https://dockr.ly/2zMPc17 for details)
     Args:
         ip: ip or host of the remote deamon (give None to use local environment)
         port: port of the remote deamon
     """
     if not ip:
         self.docker_client=docker.from_env()
     else:
         self.docker_client=docker.client("tcp:/"+":".join([ip.strip(), port.strip()]))
示例#4
0
    def _connect(self):
        """Top level interface to create a socket and connect it to the
        redis daemon.

        :rtype: socket

        """
        base_url = self.config.get("path")
        version = self.config.get("version", "auto")
        timeout = self.config.get("timeout", 5)
        tls = self.config.get("tls", False)
        LOGGER.debug("connecting to docker at: %s | version: %s | timeout: %s | tls: %s",
                     base_url,
                     version,
                     timeout,
                     tls)
        return client(base_url=base_url,
                             version=version,
                             timeout=timeout,
                             tls=tls)
示例#5
0
from docker import client

cli = client(base_url='unix://var/run/docker.sock')
cli.containers()
container = cli.create_container(image='ubuntu:latest',
                                 command='/bin/sleep 30')
print(container['Id'])
container_id = container['Id']
cli.inspect_container(container_id)['Name']


def restartContainer(container_id):
    try:
        cli.restart(container_id)
    except Exception as e:
        print(e)


# List All images and get details first  images
images = cli.images()
print(images[0])
image = images[0]
image_id = image['Id']
cli.inspect_image(image_id)

# volume

volumes = cli.volume()
print(volumes['Volumes'][0])

# Create volumes
示例#6
0
class Docker_Opers(client):
    '''
    classdocs
    '''
    client = client()

    def __init__(self):
        super(Docker_Opers,
              self).__init__(base_url='unix://var/run/docker.sock')
        self.image_cache = []
        self.log = logging.getLogger(__name__)

    def create(self, docker_model):

        entry = _get_property_dict(docker_model)
        image = entry['image']

        tty = entry['tty'] if 'tty' in entry else True
        stdin_open = entry['stdin_open'] if 'stdin_open' in entry else True

        kwargs = {
            'image': image,
            'user': '******',
            'detach': False,
            'tty': tty,
            'stdin_open': stdin_open,
        }

        if 'name' in entry:
            kwargs['name'] = entry['name']

        if 'volumes' in entry:
            kwargs['volumes'] = entry['volumes']

        if 'environment' in entry:
            kwargs['environment'] = entry['environment']

        if 'hostname' in entry:
            kwargs['hostname'] = entry['hostname']

        if 'cpu_shares' in entry:
            kwargs['cpu_shares'] = entry['cpu_shares']

        if 'mem_limit' in entry:
            kwargs['mem_limit'] = entry['mem_limit']

        if 'entrypoint' in entry:
            kwargs['entrypoint'] = entry['entrypoint']

        if 'command' in entry:
            kwargs['command'] = entry['command']

        if 'ports' in entry:
            kwargs['ports'] = entry['ports']

        container = self.client.create_container(**kwargs)

        #self.docker_start(docker_model)

        return container['Id']

    def start(self, docker_model):

        container = docker_model.name
        entry = _get_property_dict(docker_model)
        privileged = entry['privileged'] if 'privileged' in entry else True
        network_mode = entry[
            'network_mode'] if 'network_mode' in entry else 'bridge'

        kwargs = {
            'container': container,
            'network_mode': network_mode,
            'privileged': privileged
        }

        if 'binds' in entry:
            kwargs['binds'] = entry['binds']

        if 'network' in entry:
            kwargs['network_mode'] = entry['network']

        if 'privileged' in entry:
            kwargs['privileged'] = entry['privileged']

        if 'lxc_conf' in entry:
            kwargs['lxc_conf'] = entry['lxc_conf']

        if 'volumes_from' in entry:
            kwargs['volumes_from'] = entry['volumes_from']

        if 'port_bindings' in entry:
            kwargs['port_bindings'] = entry['port_bindings']

        if 'links' in entry:
            kwargs['links'] = entry['links']

        if 'dns' in entry:
            kwargs['dns'] = entry['dns']

        if 'dns_search' in entry:
            kwargs['dns_search'] = entry['dns_search']

        if 'publish_all_ports' in entry:
            kwargs['publish_all_ports'] = entry['publish_all_ports']

        self.client.start(**kwargs)

    def stop(self, container, timeout=20):
        self.client.stop(container, timeout)

    def kill(self, container, signal='HUP'):
        self.client.kill(container, signal)

    def remove_container(self, container, v=True, link=False, force=False):
        self.client.remove_container(container, v, link, force)

    def destroy(self, container):
        self.kill(container)
        self.remove_container(container, force=True)

    def restart(self, container):
        self.client.restart(container)

    def containers(self,
                   quiet=False,
                   all=False,
                   trunc=True,
                   latest=False,
                   since=None,
                   before=None,
                   limit=-1,
                   size=False):
        return self.client.containers(quiet, all, trunc, latest, since, before,
                                      limit, size)

    def inspect_container(self, container):
        return self.client.inspect_container(container)

    '''
    @todo: need test
    '''

    def retrieve_containers_ids(self):
        containers_info = self.containers()
        id_list = []
        for container_iter in containers_info:
            id_list.append(container_iter['Id'])
        return id_list

    '''
    @todo: need test
    '''

    def retrieve_containers_ips(self):
        container_id_list = self.retrieve_containers_ids()
        ip_list = []
        for container_id_iter in container_id_list:
            env = self.inspect_container(container_id_iter)['Config']['Env']
            for item in env:
                if item.startswith("IP="):
                    ip_list.append(item.split("=")[1])
        return ip_list

    def image_name_list(self):
        image_list = []
        images = self.client.images()
        for image in images:
            for k, v in image.items():
                if k == 'RepoTags':
                    image_list.extend(v)
        return image_list

    def image_id_list(self):
        return self.client.images(quiet=True)

    def tag(self, image):
        parts = image.split(':')
        if len(parts) == 1:
            repo = parts[0]
            tag = 'latest'
        elif len(parts) == 2:
            repo = parts[0]
            tag = parts[1]
        else:
            repo = ':'.join(parts[:-1])
            tag = parts[-1]
        return (repo, tag)

    def pull(self, image):
        image_name_list = self.image_name_list()
        if image in image_name_list:
            logging.info('image exist, no need to pull')
            return True

        repository, tag = self.tag(image)
        pull_result = self.client.pull(repository=repository,
                                       tag=tag,
                                       stream=True)
        for line in pull_result:
            parsed = json.loads(line)
            if 'error' in parsed:
                raise CommonException(parsed['error'])

    def rmi(self, image):
        # Force removal, sometimes conflicts result from truncated pulls
        self.client.remove_image(image, force=True)