gVisor implements a large portion of the Linux surface and while we strive to make it broadly compatible, there are (and always will be) unimplemented features and bugs. The only real way to know if it will work is to try. If you find a container that doesn’t work and there is no known issue, please file a bug indicating the full command you used to run the image. You can view open issues related to compatibility here.
If you’re able to provide the debug logs, the problem likely to be fixed much faster.
gVisor is widely used as a container runtime supporting arbitrary user-provided workloads in Cloud products such as DigitalOcean’s App Platform or Google’s Cloud Run. See the Users page for more. The decision to use gVisor for these products means that compatibility issues are not a common problem for most workloads in practice.
While gVisor only implements a subset of the Linux syscall ABI, the unimplemented part of the ABI is mostly comprised of alternatives to existing syscalls that gVisor does support. For example, gVisor does not fully support io_uring
-related syscalls (as seen below), but does support other I/O-related syscalls. In practice, most language runtimes and libraries that do I/O will automatically probe and determine which syscall variant for I/O they can use, so they will effectively work in gVisor even if they would use io_uring
when running on Linux. For this reason, looking through the list of supported syscalls is not necessarily a good measure of how widely compatible gVisor is in practice.
gVisor releases go through the regression tests of popular language runtimes (Python, Java, Node.js, PHP, Go) to ensure continued compatibility with the base libraries of these languages. This means most programs written in these languages will work.
While gVisor aims to support a wide variety of workloads and to achieve near-parity with Linux, it will never be perfect. Notably:
fat32
, ext3
, ext4
are not natively supported inside the gVisor kernel. As such, it is not possible to mount block devices from within the sandbox. It is however possible to mount such devices on a host Linux machine, and expose the mounted filesystem to the sandbox.iptables
are only partially supported. The general goal is to support the featureset necessary to be able to run Docker in gVisor, but not necessarily further.io_uring
is disabled by default. When enabled, its implementation is limited to basic I/O operations. Similar for nftables
rules support.