DockerContainerState.fromJson constructor
Reads the answer of GET /containers/{id}/json.
Implementation
factory DockerContainerState.fromJson(Map<String, Object?> json) {
final state = (json['State'] as Map<String, Object?>?) ?? const {};
final health = state['Health'] as Map<String, Object?>?;
final network = json['NetworkSettings'] as Map<String, Object?>?;
final published = (network?['Ports'] as Map<String, Object?>?) ?? const {};
final config = json['Config'] as Map<String, Object?>?;
final ports = <String, int>{};
for (final MapEntry(:key, :value) in published.entries) {
final bindings = value as List<Object?>?;
for (final binding in bindings ?? const <Object?>[]) {
final port = int.tryParse(
'${(binding! as Map<String, Object?>)['HostPort']}',
);
if (port != null) {
ports.putIfAbsent(key, () => port);
}
}
}
return DockerContainerState(
id: '${json['Id']}',
running: state['Running'] == true,
status: '${state['Status']}',
exitCode: (state['ExitCode'] as num?)?.toInt() ?? 0,
health: health == null ? null : '${health['Status']}',
ports: ports,
labels: {
for (final e
in ((config?['Labels'] as Map<String, Object?>?) ?? const {})
.entries)
e.key: '${e.value}',
},
error: '${state['Error'] ?? ''}',
);
}