| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- class Container(object):
- """
- Represents a Docker container, constructed from the output of
- GET /containers/:id:/json.
- """
- def __init__(self, client, dictionary, has_been_inspected=False):
- self.client = client
- self.dictionary = dictionary
- self.has_been_inspected = has_been_inspected
- @classmethod
- def from_ps(cls, client, dictionary, **kwargs):
- """
- Construct a container object from the output of GET /containers/json.
- """
- new_dictionary = {
- 'ID': dictionary['Id'],
- 'Image': dictionary['Image'],
- }
- for name in dictionary.get('Names', []):
- if len(name.split('/')) == 2:
- new_dictionary['Name'] = name
- return cls(client, new_dictionary, **kwargs)
- @classmethod
- def from_id(cls, client, id):
- return cls(client, client.inspect_container(id))
- @classmethod
- def create(cls, client, **options):
- response = client.create_container(**options)
- return cls.from_id(client, response['Id'])
- @property
- def id(self):
- return self.dictionary['ID']
- @property
- def name(self):
- return self.dictionary['Name']
- @property
- def environment(self):
- self.inspect_if_not_inspected()
- out = {}
- for var in self.dictionary.get('Config', {}).get('Env', []):
- k, v = var.split('=', 1)
- out[k] = v
- return out
- def start(self, **options):
- return self.client.start(self.id, **options)
- def stop(self):
- return self.client.stop(self.id)
- def kill(self):
- return self.client.kill(self.id)
- def remove(self):
- return self.client.remove_container(self.id)
- def inspect_if_not_inspected(self):
- if not self.has_been_inspected:
- self.inspect()
- def wait(self):
- return self.client.wait(self.id)
- def logs(self, *args, **kwargs):
- return self.client.logs(self.id, *args, **kwargs)
- def inspect(self):
- self.dictionary = self.client.inspect_container(self.id)
- return self.dictionary
- def links(self):
- links = []
- for container in self.client.containers():
- for name in container['Names']:
- bits = name.split('/')
- if len(bits) > 2 and bits[1] == self.name[1:]:
- links.append(bits[2])
- return links
|