dockerSocket function

String dockerSocket()

Returns the path to the Docker Unix socket.

Resolution order:

  1. TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE — explicit socket path.
  2. DOCKER_HOST starting with unix:// — custom Unix socket path.
  3. $XDG_RUNTIME_DIR/docker.sock — rootless Docker socket (if the file exists).
  4. /var/run/docker.sock — the standard system-wide Docker socket.

Implementation

String dockerSocket() {
  final override =
      Platform.environment['TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE'];
  if (override != null && override.isNotEmpty) {
    return override;
  }

  // Support unix:// DOCKER_HOST (rootless Docker, custom socket paths)
  final dockerHost = Platform.environment['DOCKER_HOST'] ?? '';
  if (dockerHost.startsWith('unix://')) {
    final socketPath = dockerHost.substring('unix://'.length);
    if (socketPath.isNotEmpty) {
      return socketPath;
    }
  }

  // Try rootless Docker socket via XDG_RUNTIME_DIR
  final xdgRuntimeDir = Platform.environment['XDG_RUNTIME_DIR'];
  if (xdgRuntimeDir != null && xdgRuntimeDir.isNotEmpty) {
    final rootlessSocket = '$xdgRuntimeDir/docker.sock';
    if (File(rootlessSocket).existsSync()) {
      return rootlessSocket;
    }
  }

  return '/var/run/docker.sock';
}