Skip to main content
This guide covers essential container lifecycle operations including creating, starting, stopping, and managing running containers.

Creating containers

The container create command creates a container from an image without starting it. This is useful when you want to configure a container but start it later.
container create --name my-container ubuntu:latest echo "hello"
After creating a container, you can start it using the container start command:
container start my-container
Use container run to create and start a container in a single command. The run command is a combination of create and start.

Running containers

The container run command is the most common way to start containers. It creates and starts a container in one operation.

Basic usage

# Run a container and attach an interactive shell
container run -it ubuntu:latest /bin/bash

# Run a background web server
container run -d --name web -p 8080:80 nginx:latest

# Set environment variables and limit resources
container run -e NODE_ENV=production --cpus 2 --memory 1G node:18

Common options

  • -e, --env: Set environment variables (format: key=value)
  • --env-file: Read environment variables from a file
  • -u, --user: Set the user for the process
  • -w, --workdir: Set the initial working directory
  • -i, --interactive: Keep standard input open
  • -t, --tty: Open a TTY with the process

Detached vs. interactive mode

Detached mode (-d) runs containers in the background:
container run -d --name my-web-server --rm web-test
The --detach flag runs the container in the background, so you can continue running commands in the same terminal. Interactive mode (-it) allows you to interact with the container:
container run -it ubuntu:latest /bin/bash
The -i flag keeps stdin open, and -t allocates a pseudo-TTY.
You will often see these two options abbreviated and specified together as -ti or -it.

Starting and stopping containers

Starting containers

Start a stopped container:
container start <container-id>
You can attach to the container’s output streams:
container start --attach --interactive my-container

Stopping containers gracefully

The container stop command stops running containers gracefully by sending a signal (default: SIGTERM):
# Stop a specific container
container stop my-web-server

# Stop multiple containers
container stop container1 container2 container3

# Stop all running containers
container stop --all

# Specify a custom timeout before SIGKILL
container stop --time 10 my-container
The --time option specifies seconds to wait before killing the container (default: 5 seconds).

Killing containers immediately

The container kill command immediately kills running containers:
# Kill a container with default KILL signal
container kill my-container

# Send a custom signal
container kill --signal SIGTERM my-container

# Kill all running containers
container kill --all
Use kill with caution: it does not allow for graceful shutdown. Prefer stop for normal operations.

Executing commands in running containers

The container exec command runs a new command inside a running container:
# Execute a single command
container exec my-web-server ls /content
Output:
index.html

Interactive shell

Run an interactive shell to explore the container:
container exec --tty --interactive my-web-server sh
/content # ls
index.html
/content # uname -a
Linux my-web-server 6.12.28 #1 SMP Tue May 20 15:19:05 UTC 2025 aarch64 Linux
/content # exit
The --tty and --interactive flags allow you to interact with the shell from your host terminal. These are often abbreviated as -it.

Additional exec options

# Run as a specific user
container exec --user www-data my-container whoami

# Set environment variables
container exec --env DEBUG=true my-container /app/script.sh

# Change working directory
container exec --workdir /var/log my-container ls -la

# Run in detached mode
container exec --detach my-container /background-task.sh

Viewing container logs

The container logs command displays the output from your containerized application.

Basic usage

container logs my-web-server
Example output:
192.168.64.1 - - [15/May/2025 03:00:03] "GET / HTTP/1.1" 200 -

Following logs in real-time

container logs --follow my-web-server
Press Ctrl+C to stop following the logs.

Limiting log output

# Show only the last 50 lines
container logs -n 50 my-web-server

Viewing boot logs

Use the --boot option to see the logs for the virtual machine boot and init process:
container logs --boot my-web-server
Example output:
[    0.098284] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    0.098466] random: crng init done
[    0.099657] brd: module loaded
[    0.100707] loop: module loaded
[    0.127467] EXT4-fs (vda): mounted filesystem without journal. Quota mode: disabled.
[    0.127525] VFS: Mounted root (ext4 filesystem) readonly on device 254:0.
[    0.143252] Run /sbin/vminitd as init process
2025-05-15T02:24:08+0000 info vminitd : [vminitd] vminitd booting...

Listing containers

The container list (or container ls) command shows containers.

List running containers

container list
ID             IMAGE            OS     ARCH   STATE    ADDR
my-web-server  web-test:latest  linux  arm64  running  192.168.64.3

List all containers (including stopped)

container list --all
You can abbreviate the --all option to -a:
container ls -a

Output formats

container list --format table
ID             IMAGE            OS     ARCH   STATE    ADDR
my-web-server  web-test:latest  linux  arm64  running  192.168.64.3

Inspecting containers

The container inspect command displays detailed container information in JSON format:
container inspect my-web-server | jq
[
  {
    "status": "running",
    "networks": [
      {
        "address": "192.168.64.3/24",
        "gateway": "192.168.64.1",
        "hostname": "my-web-server.test.",
        "network": "default"
      }
    ],
    "configuration": {
      "mounts": [],
      "hostname": "my-web-server",
      "id": "my-web-server",
      "resources": {
        "cpus": 4,
        "memoryInBytes": 1073741824
      }
    }
  }
]
Use jq to filter and format JSON output:
# Get only the IP address
container inspect my-web-server | jq '.[0].networks[0].address'

Deleting containers

The container delete (or container rm) command removes one or more containers.

Delete stopped containers

container delete my-container

Delete multiple containers

container delete container1 container2 container3

Force delete running containers

container delete --force my-running-container
Forcing deletion of a running container will immediately kill it without graceful shutdown.

Delete all containers

container delete --all

Auto-remove with —rm flag

Use the --rm flag when running a container to automatically remove it after it stops:
container run --rm --name temp-container ubuntu:latest echo "hello"

Pruning stopped containers

The container prune command removes all stopped containers to reclaim disk space:
container prune
The command outputs the amount of space freed after deletion.
Pruning only affects stopped containers. Running containers are not touched.

Build docs developers (and LLMs) love