docs: def start(self):
          """Start the Docker container"""
          if self.container_id is not None:
              msg = 'The Docker container is already running with ID {}'
              raise Exception(msg.format(self.container_id))
  
          process = Popen(['docker ps | grep ":{}"'.format(self.port)],
                          shell=True, stdout=PIPE)
          (grep_output, _grep_error) = process.communicate()
          lines = grep_output.split('\n')
          for line in lines:
              if ':{}'.format(self.port) in line:
                  other_id = line.split()[0]
                  msg = 'Port {} is already being used by container {}'
                  raise Exception(msg.format(self.port, other_id))
  
          self.container_id = check_output(self.command, shell=True).strip()
          try:
              self.ip_address = check_output(['docker-machine', 'ip']).strip()
          except (CalledProcessError, OSError):
              self.ip_address = '127.0.0.1'
  
          output = OutputMonitor()
          logs_process = Popen(['docker', 'logs', '-f', self.container_id],
                               stdout=output.stream.input,
                               stderr=open(os.devnull, 'w'))
          ready_log_line = 'Selenium Server is up and running'
          if not output.wait_for(ready_log_line, 10):
              logs_process.kill()
              msg = 'Timeout starting the Selenium server Docker container:\n'
              msg += '\n'.join(output.lines)
              raise Exception(msg)
          logs_process.kill()