def run!(*args)
      file_args = case @file
      when 'docker-compose.yml'
        []
      when Array
        # backticks sugar can't handle array values; build a list of hashes
        # IMPORTANT: preserve the order of the files so overrides work correctly
        file_args = @file.map { |filepath| { :file => filepath } }
      else
        # a single String (or Pathname, etc); use normal sugar to add it
        [{ file: @file.to_s }]
      end

      @shell.chdir = dir
      @last_command = @shell.run('docker-compose', *file_args, *args).join
      status = @last_command.status
      out = @last_command.captured_output
      err = @last_command.captured_error
      status.success? || fail(Error.new(args.first, status, out+err))
      out
    end
def run!(*args)
      file_args = case @file
      when 'docker-compose.yml'
        []
      when Array
        # backticks sugar can't handle array values; build a list of hashes
        # IMPORTANT: preserve the order of the files so overrides work correctly
        file_args = @file.map { |filepath| { :file => filepath } }
      else
        # a single String (or Pathname, etc); use normal sugar to add it
        [{ file: @file.to_s }]
      end

      @shell.chdir = dir
      @last_command = @shell.run('docker-compose', *file_args, *args).join
      status = @last_command.status
      out = @last_command.captured_output
      err = @last_command.captured_error
      status.success? || fail(Error.new(args.first, status, out+err))
      out
    end
Run a docker-compose command without validating that the CLI parameters
 make sense. Prepend project and file options if suitable.

 @see Docker::Compose::Shell#command

 @param [Array] args command-line arguments in the format accepted by
   Backticks::Runner#command
 @return [String] output of the command
 @raise [Error] if command fails