dockerRunBuilder function

Future<void> dockerRunBuilder(
  1. String containerName,
  2. String version,
  3. String outputDirectory
)

Runs a Docker container with specified parameters.

containerName - The name/tag of the container to run version - The version parameter to pass to the container outputDirectory - The directory to mount as /output in the container

Runs the container with GPU support and mounts the output directory.

Implementation

Future<void> dockerRunBuilder(
  String containerName,
  String version,
  String outputDirectory,
) async {
  // Ensure output directory exists
  final outputDir = Directory(outputDirectory);
  await outputDir.create(recursive: true);

  print('Running Docker container: $containerName');
  print('Version: $version');
  print('Output directory: ${outputDir.absolute.path}');

  // Run docker run command with GPU support and volume mount
  final result = await Process.run('docker', [
    'run',
    '--rm',
    '--gpus',
    'all',
    '-v',
    '${outputDir.absolute.path}:/output',
    containerName,
    version,
  ]);

  if (result.exitCode != 0) {
    throw Exception(
      'Docker run failed with exit code ${result.exitCode}:\n'
      'stdout: ${result.stdout}\n'
      'stderr: ${result.stderr}',
    );
  }

  print('Docker container completed successfully');
  if (result.stdout.toString().isNotEmpty) {
    print('Container output:\n${result.stdout}');
  }
}