runc-spec(8) System Manager's Manual runc-spec(8)

# [NAME](#NAME)

**runc-spec** - create a new specification file

# [SYNOPSIS](#SYNOPSIS)

**runc spec** \[*option* ...]

# [DESCRIPTION](#DESCRIPTION)

The **spec** command creates the new specification file named *config.json* for the bundle.

The spec generated is just a starter file. Editing of the spec is required to achieve desired results. For example, the newly generated spec includes an **args** parameter that is initially set to call the **sh** command when the container is started. Calling **sh** may work for an ubuntu container or busybox, but will not work for containers that do not include the **sh** binary.

# [OPTIONS](#OPTIONS)

[**--bundle**|**-b** *path*](#bundle)

Set *path* to the root of the bundle directory.

[**--rootless**](#rootless)

Generate a configuration for a rootless container. Note this option is entirely different from the global **--rootless** option.

# [EXAMPLES](#EXAMPLES)

To run a simple "hello-world" container, one needs to set the **args** parameter in the spec to call hello. This can be done using [**sed**(1)](/man/os/runc-1.4/sed.1), [**jq**(1)](/man/os/runc-1.4/jq.1), or a text editor.

The following commands will:  
\- create a bundle for hello-world;  
\- change the command to run in a container to **/hello** using [**jq**(1)](/man/os/runc-1.4/jq.1);  
\- run the **hello** command in a new hello-world container named **container1**.

```
mkdir hello
cd hello
docker pull hello-world
docker export $(docker create hello-world) > hello-world.tar
mkdir rootfs
tar -C rootfs -xf hello-world.tar
runc spec
jq '.process.args |= ["/hello"]' < config.json > new.json
mv -f new.json config.json
runc run container1
```

In the **run** command above, **container1** is the name for the instance of the container that you are starting. The name you provide for the container instance must be unique on your host.

An alternative for generating a customized spec config is to use **oci-runtime-tool**; its sub-command **oci-runtime-tool generate** has lots of options that can be used to do any customizations as you want. See runtime-tools ⟨https://github.com/opencontainers/runtime-tools⟩ to get more information.

When starting a container through **runc**, the latter usually needs root privileges. If not already running as root, you can use [**sudo**(8)](/man/os/runc-1.4/sudo.8), for example:

```
sudo runc start container1
```

Alternatively, you can start a rootless container, which has the ability to run without root privileges. For this to work, the specification file needs to be adjusted accordingly. You can pass the **--rootless** option to this command to generate a proper rootless spec file.

# [SEE ALSO](#SEE_ALSO)

[**runc-run**(8)](/man/os/runc-1.4/runc-run.8), [**runc**(8)](/man/os/runc-1.4/runc.8).

---

Document: runc-spec(8) from runc-1.4 1.4.3-r11 (Chainguard OS)
Source: https://github.com/opencontainers/runc
