run method

Future<D> run(
  1. DockerCommander dockerCommander, {
  2. String? name,
  3. String? network,
  4. String? hostname,
  5. List<int>? hostPorts,
  6. bool cleanContainer = true,
  7. int? outputLimit,
})

Implementation

Future<D> run(DockerCommander dockerCommander,
    {String? name,
    String? network,
    String? hostname,
    List<int>? hostPorts,
    bool cleanContainer = true,
    int? outputLimit}) {
  var mappedPorts = ports?.toList();

  hostPorts ??= this.hostPorts;

  if (hostPorts != null &&
      containerPorts != null &&
      hostPorts.isNotEmpty &&
      containerPorts!.isNotEmpty) {
    mappedPorts ??= <String>[];

    var portsLength = Math.min(hostPorts.length, containerPorts!.length);

    for (var i = 0; i < portsLength; ++i) {
      var p1 = hostPorts[i];
      var p2 = containerPorts![i];
      mappedPorts.add('$p1:$p2');
    }

    mappedPorts = mappedPorts.toSet().toList();
  }

  var dockerContainer = dockerCommander.run(
    image,
    version: version,
    imageArgs: imageArgs,
    containerName: name ?? this.name,
    ports: mappedPorts,
    network: network ?? this.network,
    hostname: hostname ?? this.hostname,
    environment: environment,
    volumes: volumes,
    cleanContainer: cleanContainer,
    outputAsLines: outputAsLines,
    outputLimit: outputLimit ?? this.outputLimit,
    stdoutReadyFunction: stdoutReadyFunction,
    stderrReadyFunction: stderrReadyFunction,
    dockerContainerInstantiator: instantiateDockerContainer,
  );

  return dockerContainer.then((value) async {
    var d = value as D;
    await initializeContainer(d);
    return d;
  });
}