As far as I know, there is no upstream tool that can solve this problem generically for you. At a high level, the problems are:
The operator manifests themselves define the image/images that the operator actually runs to start its controllers. You would need a way to find out what those images are, copy them into a registry that the cluster can interact with, and update the operator bundles themselves to point to the accessible registry.
Many / most operators also have a set of images that they deploy and run as part of interacting with their APIs. The operator-framework has defined the concept of "related images" that some operators have opted into, whereby the images they use as part of runtime are set as environment variables that are injected into the operator itself when it is installed by OLM. Those references, if the operator actually implements them (rather than just hardcoding the image references in its source code) would also need to be copied and updated to point to the correct registry.
Lastly, OLM actually references these operator manifests by a pointer to a bundle image (inside the operator catalog) that it pulls down onto the cluster at runtime to install the operator. To get that to work, you would need to modify *those images* for the above two steps (by rebuilding them somehow) and copy those into the accessible registry, then build a new catalog image that points to those bundles.
Needless to say, there's a lot of internal moving bits here that make creating a simple image mirroring process maintainable (especially given that some of this relies on each operator following the correct pattern), and a lot of image rebuilds and modifying manifests. OKD and OpenShift have handwaved some of those problems by using ImageContentSourcePolicies and building some mirroring tools into their related toolkits, but without that API it's a very nontrivial problem.
It does seem like there is some appetite in the kube community for attempting to solve the proxied/offline/disconnected cluster problem in general, and at some point when that happens it would probably make sense for the operator framework to build on top of whatever solution happens there. But until it does in a first class way, there's just not really a trivial way to make this work for OLM. You *might* be able to configure some of this to work with very specific operators using proxies to force the container runtime to pull the right set of images, but there are a lot of caveats and it's probably not something that OLM would attempt to integrate with at this time.
Thanks,
Kevin Rizza
OLM Maintainer