HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
opencontainers
runc
Go2015–2026
opencontainers / runc

runc

CLI tool for spawning and running containers according to the OCI specification

42Distinct people
57Mentions
0Explicit recommenders
13.6KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

CLI tool for spawning and running containers according to the OCI specification

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 12:45:45 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year57 dated mentions

Observed mentions: 2015-06-22 18:01:36 UTC to 2026-10-23 10:01:24 UTC.

02468102015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 9 mentions; 0 submissions, 9 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 5 mentions; 2 submissions, 3 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 7 mentions; 2 submissions, 5 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC909
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC707
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC615
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC303
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC404
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC303
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC606
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC000
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC303
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC523
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC725
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC404

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
runc Introduction runc is a CLI tool for spawning and running containers on Linux according to the OCI specification. Releases You can find official releases of runc on the release page. All releases are signed by one of the keys listed in the runc.keyring file in the root of this repository. Security The reporting process and disclosure communications are outlined here. Security Audit A third party security audit was performed by Cure53, you can see the full report here. Building runc only supports Linux. See the header of go.mod for the minimally required Go version. Pre-Requisites Utilities and Libraries In addition to Go, building runc requires multiple utilities and libraries to be installed on your system. On Ubuntu/Debian, you can install the required dependencies with: apt update && apt install -y make gcc linux-libc-dev libseccomp-dev pkg-config git On CentOS/Fedora, you can install the required dependencies with: yum install -y make gcc kernel-headers libseccomp-devel pkg-config git On Alpine Linux, you can install the required dependencies with: apk --update add bash make gcc libseccomp-dev musl-dev linux-headers git The following dependencies are optional: libseccomp - only required if you enable seccomp support; to disable, see Build Tags. libpathrs - only required if you enable libpathrs support; to disable, see Build Tags. For notes on installing libpathrs, see the next section. libpathrs libpathrs is a Rust library runc can optionally use for path safety. As mentioned in the build tag section, its use is controlled with the libpathrs build tag. runc currently requires at least libpathrs 0.2.5 in order to function properly. At time of writing, very few distributions have libpathrs packages and so it is usually necessary to build and install it locally. For detailed installation instructions, see the upstream documentation, but for development builds the following instructions should be sufficient: libpathrs requires Rust 1.63+ (which is available on almost any distribution, including Debian oldstable and enterprise distributions like RHEL or SLES). Assuming you already have cargo installed (as well as other libpathrs dependencies like clang and lld), the following steps are all that are really necessary to install libpathrs: LIBPATHRS_VERSION=0.2.5 curl -o - -sSL https://github.com/cyphar/libpathrs/releases/download/v${LIBPATHRS_VERSION}/libpathrs-${LIBPATHRS_VERSION}.tar.xz | tar xvfJ - cd libpathrs-${LIBPATHRS_VERSION}/ make release sudo ./install.sh --prefix=/usr/local sudo ldconfig As part of our CI, we make use of a custom installation script for libpathrs which may be useful as a reference for folks with more complicated needs. With script/build-libpathrs.sh the installation of libpathrs becomes as simple as: sudo ./script/build-libpathrs.sh "$LIBPATHRS_VERSION" /usr/local sudo ldconfig However, please note that this installation script is completely unsupported and is not really intended for general use (it includes some workarounds for issues in our CI which will no longer be necessary once libpathrs has distribution packages we can use). Build # create a 'github.com/opencontainers' in your GOPATH/src cd github.com/opencontainers git clone https://github.com/opencontainers/runc cd runc make sudo make install You can also use go get to install to your GOPATH, assuming that you have a github.com parent folder already created under src: go get github.com/opencontainers/runc cd $GOPATH/src/github.com/opencontainers/runc make sudo make install runc will be installed to /usr/local/sbin/runc on your system. Version string customization You can see the runc version by running runc --version. You can append a custom string to the version using the EXTRA_VERSION make variable when building, e.g.: make EXTRA_VERSION="+build-1" Bear in mind to include some separator for readability. Build Tags runc supports optional build tags for compiling support of various features, with some of them enabled by default in the top-level Makefile. The following build tags are currently recognized: Build Tag Feature Set by Default Dependencies seccomp Syscall filtering using libseccomp. yes libseccomp libpathrs Use libpathrs for path safety. yes libpathrs runc_nocriu Disables runc checkpoint/restore. no criu To add or remove build tags from the default set, use the RUNC_BUILDTAGS make or shell variable. Tags prefixed with - are removed from the default set; others are added. For example: # Add runc_nocriu and remove seccomp tag. make RUNC_BUILDTAGS="runc_nocriu -seccomp" The following build tags were used earlier, but are now obsoleted: runc_nodmz (since runc v1.2.1 runc dmz binary is dropped) nokmem (since runc v1.0.0-rc94 kernel memory settings are ignored) apparmor (since runc v1.0.0-rc93 the feature is always enabled) selinux (since runc v1.0.0-rc93 the feature is always enabled) Running the test suite runc currently supports running its test suite via Docker. To run the suite just type make test. make test There are additional make targets for running the tests outside of a container but this is not recommended as the tests are written with the expectation that they can write and remove anywhere. You can run a specific test case by setting the TESTFLAGS variable. # make test TESTFLAGS="-run=SomeTestFunction" You can run a specific integration test by setting the TESTPATH variable. # make test TESTPATH="/checkpoint.bats" You can run a specific rootless integration test by setting the ROOTLESS_TESTPATH variable. # make test ROOTLESS_TESTPATH="/checkpoint.bats" You can run a test using your container engine's flags by setting CONTAINER_ENGINE_BUILD_FLAGS and CONTAINER_ENGINE_RUN_FLAGS variables. # make test CONTAINER_ENGINE_BUILD_FLAGS="--build-arg http_proxy=http://yourproxy/" CONTAINER_ENGINE_RUN_FLAGS="-e http_proxy=http://yourproxy/" Go Dependencies Management runc uses Go Modules for dependencies management. Please refer to Go Modules for how to add or update new
Read the full README on GitHub

What Hacker News says

4 sources
Not to contradict anything you wrote, but if you look at the language stats for https://github.com/opencontainers/runc, it has 68.5% Go, 27.1% Shell and 3.5% C, so it's fair to say that it was "written in Go", even though the most important part was C - same as e.g. Doom was written in C, even though it used assembly for optimizing the performance-sensitive parts.
In Docker is weird
The repo you linked works by replacing files that are being used by other privileged containers on the same system. That works for the Kubernetes case (I'm a little surprised they don't use static binaries for their own privileged containers, seems a little dangerous to share any kind of data with untrusted tenants even if it's read-only) but not standalone containers. However, there is a much an easier way of doing a breakout -- you can corrupt the host runc binary in a way analogous to CVE-2019-5736. The next time a container is spawned, the host runc binary will get run as as root and that's that. Ironically, the first version of the protection against this attack I wrote also protected against page cache poisoning (by making a temporary copy of the runc binary during container setup in a sealed memfd and re-execing that) but the runti
Read the rest
me cost of copying a 10MB binary at container startup was seen as too expensive by some users[1] so we ended up with a setup that shares the same page cache. I also distinctly remember arguing at the time that something like Dirty Cow could always happen in the future, and the memfd approach was better for that reason -- maybe I should've stuck to my guns more... :/ In practice the solution for containers is to update your seccomp policy to block the vulnerable syscall. [1]: https://github.com/opencontainers/runc/issues/1980
In Dirty Frag: Universal Linux LPE
It looks to me like what is called a "container escape" in this context isn't necessarily as bad as it seems. For example, in the advisory for CVE-2025-31133 affecting runc[1]: > Container Escape: ...Thus, the attacker can simply trigger a coredump and gain complete root privileges over the host. Sounds bad. But... > this flaw effectively allows any attacker that can spawn containers (with some degree of control over what kinds of containers are being spawned) to achieve the above goals. The attacker needs already to have the capability to spawn containers! This isn't a case of "RCE within the container" -> "RCE outside the container", which is what I would think prima facie reading "container escape". I have always thought that running an untrusted image within an unprivileged container was a safe thing to do and I still believe so. [1]
Read the rest
In Don't trust AI agents
Here's the set up I use on Linux: The idea is to completely sandbox the program, and allow only access to specific bind mounted folders. But we also want to have to the frills of using GUI programs, audio, and network access. runc (https://github.com/opencontainers/runc) allows us to do exactly this. My config sets up a container with folders bind mounted from the host. The only difficult part is setting up a transparent network proxy so that all the programs that need internet just work. Container has a process namespace, network namespace, etc and has no access to host except through the bind mounted folders. Network is provided via a domain socket inside a bind mounted folder. GUI programs work by passing through a Wayland socket in a folder and setting environmental variables. The set up looks like this * config.json - runc config
Read the rest
* run.sh - runs runc and the proxy server * rootfs/ - runc rootfs (created by exporting a docker container) `mkdir rootfs && docker export $(docker create archlinux:multilib-devel) | tar -C rootfs -xvf -` * net/ - folder that is bind mounted into the container for networking Inside the container (inside rootfs/root): * net-conf.sh - transparent proxy setup * nft.conf - transparent proxy nft config * start.sh - run as a user account Clone-able repo with the files: https://github.com/dogestreet/dev-container
In Using proxies to hide secrets from Claude Code

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.