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.