port method

Future<int> port(
  1. String containerId,
  2. int port
)

Returns the host port mapped to port on containerId.

Inspects the container and reads NetworkSettings.Ports["{port}/tcp"][0].HostPort.

Throws StateError when the port is not mapped.

Implementation

Future<int> port(String containerId, int port) async {
  final resp = await _request('GET', '/containers/$containerId/json');
  _throwIfError(resp);
  final data = resp.bodyJson as Map<String, dynamic>;
  final networkSettings = data['NetworkSettings'] as Map<String, dynamic>?;
  final ports = networkSettings?['Ports'] as Map<String, dynamic>?;
  final key = '$port/tcp';
  final bindings = ports?[key] as List<dynamic>?;
  if (bindings == null || bindings.isEmpty) {
    throw StateError('Port $port not mapped for container $containerId');
  }
  final binding = bindings.first as Map<String, dynamic>;
  return int.parse(binding['HostPort'] as String);
}