From cb824629ba4ae9c7e089cee4b120893e3b5aae38 Mon Sep 17 00:00:00 2001 From: lifubang Date: Fri, 26 Feb 2021 21:46:36 +0800 Subject: [PATCH] proposal: add --keep to runc run Signed-off-by: lifubang --- run.go | 4 +++ tests/integration/run.bats | 59 ++++++++++++++++++++++++++++++++++++++ utils_linux.go | 2 +- 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 tests/integration/run.bats diff --git a/run.go b/run.go index f8d631784..f18a0c154 100644 --- a/run.go +++ b/run.go @@ -40,6 +40,10 @@ command(s) that get executed on start, edit the args parameter of the spec. See Name: "detach, d", Usage: "detach from the container's process", }, + cli.BoolFlag{ + Name: "keep", + Usage: "do not delete the container after it exits", + }, cli.StringFlag{ Name: "pid-file", Value: "", diff --git a/tests/integration/run.bats b/tests/integration/run.bats new file mode 100644 index 000000000..63be89d2c --- /dev/null +++ b/tests/integration/run.bats @@ -0,0 +1,59 @@ +#!/usr/bin/env bats + +load helpers + +function setup() { + setup_hello +} + +function teardown() { + teardown_bundle +} + +@test "runc run" { + runc run test_hello + [ "$status" -eq 0 ] + + runc state test_hello + [ "$status" -ne 0 ] +} + +@test "runc run --keep" { + runc run --keep test_run_keep + [ "$status" -eq 0 ] + + testcontainer test_run_keep stopped + + runc state test_run_keep + [ "$status" -eq 0 ] + + runc delete test_run_keep + + runc state test_run_keep + [ "$status" -ne 0 ] +} + +@test "runc run --keep (check cgroup exists)" { + # for systemd driver, the unit's cgroup path will be auto removed if container's all processes exited + requires no_systemd + + [[ "$ROOTLESS" -ne 0 ]] && requires rootless_cgroup + + set_cgroups_path + + runc run --keep test_run_keep + [ "$status" -eq 0 ] + + testcontainer test_run_keep stopped + + runc state test_run_keep + [ "$status" -eq 0 ] + + # check that cgroup exists + check_cgroup_value "pids.max" "max" + + runc delete test_run_keep + + runc state test_run_keep + [ "$status" -ne 0 ] +} diff --git a/utils_linux.go b/utils_linux.go index 8b8d9e57e..293e166b4 100644 --- a/utils_linux.go +++ b/utils_linux.go @@ -439,7 +439,7 @@ func startContainer(context *cli.Context, spec *specs.Spec, action CtAct, criuOp r := &runner{ enableSubreaper: !context.Bool("no-subreaper"), - shouldDestroy: true, + shouldDestroy: !context.Bool("keep"), container: container, listenFDs: listenFDs, notifySocket: notifySocket,