run method
Future<DockerRunner?>
run(
- String image, {
- String? version,
- List<
String> ? imageArgs, - String? containerName,
- List<
String> ? ports, - String? network,
- String? hostname,
- Map<
String, String> ? environment, - Map<
String, String> ? volumes, - bool cleanContainer = true,
- String? healthCmd,
- Duration? healthInterval,
- int? healthRetries,
- Duration? healthStartPeriod,
- Duration? healthTimeout,
- String? restart,
- bool outputAsLines = true,
- int? outputLimit,
- OutputReadyFunction? stdoutReadyFunction,
- OutputReadyFunction? stderrReadyFunction,
- OutputReadyType? outputReadyType,
override
Runs a Docker containers with image
and optional version
.
Implementation
@override
Future<DockerRunner?> run(
String image, {
String? version,
List<String>? imageArgs,
String? containerName,
List<String>? ports,
String? network,
String? hostname,
Map<String, String>? environment,
Map<String, String>? volumes,
bool cleanContainer = true,
String? healthCmd,
Duration? healthInterval,
int? healthRetries,
Duration? healthStartPeriod,
Duration? healthTimeout,
String? restart,
bool outputAsLines = true,
int? outputLimit,
OutputReadyFunction? stdoutReadyFunction,
OutputReadyFunction? stderrReadyFunction,
OutputReadyType? outputReadyType,
}) async {
ports = DockerHost.normalizeMappedPorts(ports);
var imageArgsEncoded = (imageArgs != null && imageArgs.isNotEmpty)
? encodeJSON(imageArgs)
: null;
var response = await _httpClient.getJSON('run', parameters: {
'image': image,
if (version != null) 'version': version,
if (imageArgsEncoded != null) 'imageArgs': imageArgsEncoded,
if (containerName != null) 'name': containerName,
if (ports != null) 'ports': ports.join(','),
if (network != null) 'network': network,
if (hostname != null) 'hostname': hostname,
if (environment != null) 'environment': encodeQueryString(environment),
if (volumes != null) 'volumes': encodeQueryString(volumes),
'cleanContainer': '$cleanContainer',
if (healthCmd != null) 'healthCmd': healthCmd,
if (healthInterval != null)
'healthInterval': '${healthInterval.inMilliseconds}',
if (healthRetries != null) 'healthRetries': '$healthRetries',
if (healthStartPeriod != null)
'healthStartPeriod': '${healthStartPeriod.inMilliseconds}',
if (healthTimeout != null)
'healthTimeout': '${healthTimeout.inMilliseconds}',
if (restart != null) 'restart': restart,
'outputAsLines': '$outputAsLines',
'outputLimit': '$outputLimit',
}) as Map?;
if (response == null) return null;
var instanceID = response['instanceID'] as int;
containerName = response['containerName'] as String?;
var id = response['id'] as String?;
outputReadyType ??= DockerHost.resolveOutputReadyType(
stdoutReadyFunction, stderrReadyFunction);
stdoutReadyFunction ??= (outputStream, data) => true;
stderrReadyFunction ??= (outputStream, data) => true;
var imageResolved = DockerHost.resolveImage(image, version);
var runner = DockerRunnerRemote(
this,
instanceID,
containerName!,
imageResolved,
ports,
outputLimit,
outputAsLines,
stdoutReadyFunction,
stderrReadyFunction,
outputReadyType,
id);
_runners[instanceID] = runner;
var ok = await _initializeAndWaitReady(runner);
if (ok) {
_log.info('Runner[$ok]: $runner');
}
return runner;
}