exec method

  1. @override
Future<DockerProcess?> exec(
  1. String containerName,
  2. String command,
  3. List<String> args, {
  4. bool outputAsLines = true,
  5. int? outputLimit,
  6. OutputReadyFunction? stdoutReadyFunction,
  7. OutputReadyFunction? stderrReadyFunction,
  8. OutputReadyType? outputReadyType,
})
override

Executes a command inside containerName with args.

Implementation

@override
Future<DockerProcess?> exec(
  String containerName,
  String command,
  List<String> args, {
  bool outputAsLines = true,
  int? outputLimit,
  OutputReadyFunction? stdoutReadyFunction,
  OutputReadyFunction? stderrReadyFunction,
  OutputReadyType? outputReadyType,
}) async {
  var argsEncoded = args.isNotEmpty ? encodeJSON(args) : null;

  var response = await _httpClient.getJSON('exec', parameters: {
    'cmd': command,
    if (argsEncoded != null) 'args': argsEncoded,
    'name': containerName,
    'outputAsLines': '$outputAsLines',
    'outputLimit': '$outputLimit',
  }) as Map?;

  if (response == null) return null;

  var instanceID = response['instanceID'] as int;
  containerName = response['containerName'] as String;

  outputReadyType ??= DockerHost.resolveOutputReadyType(
      stdoutReadyFunction, stderrReadyFunction);

  stdoutReadyFunction ??= (outputStream, data) => true;
  stderrReadyFunction ??= (outputStream, data) => true;

  var dockerProcess = DockerProcessRemote(
      this,
      instanceID,
      containerName,
      outputLimit,
      outputAsLines,
      stdoutReadyFunction,
      stderrReadyFunction,
      outputReadyType);

  _processes[instanceID] = dockerProcess;

  var ok = await _initializeAndWaitReady(dockerProcess);

  if (ok) {
    _log.info('Exec[$ok]: $dockerProcess');
  }

  return dockerProcess;
}