def start(self, attach=False):
        """
        Start a container.  If the container is running it will return itself.

        returns a running Container.
        """
        if self.state()['running']:
            logger.info('is already running.', extra={'formatter': 'container', 'container': self.name})
            return True
        else:
            try:
                logger.info(
                    'is being started.', extra={'formatter': 'container', 'container': self.name}
                )

                # returns None on success
                self.client.start(self.id)
                if self._transcribe:
                    self.start_transcribing()

            except APIError as e:
                #
                # This is some bs... I assume that its needed because of dockers changes in 1.18 api.
                # I will resolve this next week when we stop passing properties to start.

                if e.response.status_code == 500:
                    self.client.start(self.id)
                else:
                    raise RuntimeError("Docker Error: {0}".format(e.explanation))

            if attach:
                self.attach()
                exit_code = self.wait()

            else:
                exit_code = self._wait_for_exit_code()

            return True if exit_code == 0 else False
Start a container.  If the container is running it will return itself.

        returns a running Container.