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, 10:56:20 AM 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
Docker has not built support for cgroups v2 - which has been available in linux for 3 years. https://github.com/opencontainers/runc/issues/654 in order to force this issue, Fedora has made cgroups v2 as default and mandatory in the new upcoming Fedora 31 causing docker to fail to run. https://github.com/docker/for-linux/issues/665 Podman (and other docker equivalents) have supported cgroups v2 for years. I suspect that k8s will move away from docker to recommending one of the alternatives pretty soon.
In The demise of Docker and the rise of Kubernetes
The man page is out-dated (and Michael Kerrisk has posted on LKML that he plans to rewrite it). You don't need to do chroot("/") -- that operation makes no sense because there is no semantic difference between chroot("/") and doing nothing (even the kernel can't distinguish the two cases). What you need to do is the following: mkdir newroot/oldroot mount --rbind newroot newroot # if newroot isn't a mountpoint pivot_root newroot oldroot cd / # and now get rid of the old root's mounts mount --make-rslave oldroot umount -lR oldroot At least, approximately. There is a more clever way to do it by doing "pivot_root . ."[1] but posting that here just makes it more confusing. As a complete aside, this is what container runtimes do when switching to the container rootfs -- and is the main reason why --no-pivot-root is incredibly ins
Read the rest
In Is chroot a security feature?
The version of the patch pushed to master is significantly simpler[1], and the context in which the code runs is so trivial that standard C vulnerabilities are unlikely to happen (meaning that we are doing IO to a memfd and if any errors happen we abort the process -- and immediately after the C code is set up we either execve or we boot the Go runtime which scrubs over all memory anyway). My first attempts at this patch used Go code but it wasn't possible to protect against all cases. Doing it in C was the only way to do it. [1]: https://github.com/opencontainers/runc/commit/0a8e4117e7f715...
In CVE-2019-5736: runc container breakout

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.