# How to Manage Docker Containers in Project N.O.M.A.D.: Start, Stop, Restart, and Update

> Easily manage your Docker containers in Project N.O.M.A.D. Learn to start stop restart and update your nomad container stack using simple helper scripts

- Repository: [Crosstalk Solutions/project-nomad](https://github.com/Crosstalk-Solutions/project-nomad)
- Tags: how-to-guide
- Published: 2026-03-16

---

**To manage Docker containers in Project N.O.M.A.D., use the helper scripts [`start_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/start_nomad.sh), [`stop_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/stop_nomad.sh), and [`update_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/update_nomad.sh) located in the `install/` directory, which wrap Docker CLI commands to control the `nomad_`-prefixed container stack.**

Project N.O.M.A.D. from Crosstalk-Solutions/project-nomad deploys every component—including the admin UI, Dozzle, MySQL, Redis, and the updater—as Docker containers defined in [`install/management_compose.yaml`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/install/management_compose.yaml). Understanding how to manage Docker containers in Project N.O.M.A.D. ensures you can maintain uptime, apply updates, and troubleshoot the stack without memorizing complex Docker commands.

## Understanding the Container Architecture

All Project N.O.M.A.D. services run under a unified Docker Compose project named **`project-nomad`**, which isolates the stack from other containerized applications on the host. The compose file enforces a **`restart: unless-stopped`** policy, ensuring containers automatically restart after a host reboot unless explicitly stopped.

Containers follow a strict naming convention with the **`nomad_`** prefix. Examples include:
- `nomad_admin` (main web interface)
- `nomad_mysql` (database)
- `nomad_redis` (caching layer)
- `nomad_updater` (sidecar update service)

## Starting Docker Containers in Project N.O.M.A.D.

### Using the Start Script

The [`install/start_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/install/start_nomad.sh) script provides a reliable way to bring up the entire stack. It queries Docker for all containers matching the `nomad_` prefix—regardless of their current state—and executes `docker start` on each.

```bash
bash /opt/project-nomad/start_nomad.sh

```

If no containers exist, the script outputs: *"No containers found for Project N.O.M.A.D. Is it installed?"* This prevents confusion when the stack has not been initialized.

## Stopping Docker Containers in Project N.O.M.A.D.

### Graceful Shutdown with stop_nomad.sh

To stop services gracefully, use [`install/stop_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/install/stop_nomad.sh). This script identifies only **running** containers with the `nomad_` prefix and issues `docker stop` to each, allowing processes to terminate cleanly rather than forcing an immediate kill.

```bash
bash /opt/project-nomad/stop_nomad.sh

```

The script exits silently when no containers are running, making it safe to run idempotently in automation scripts.

## Restarting Docker Containers in Project N.O.M.A.D.

### Manual Container Restart

For quick restarts of individual services without recreating containers, use the standard Docker CLI:

```bash
docker restart nomad_admin

```

### Full Stack Recreation

To restart the entire stack with fresh container instances—useful after configuration changes—use Docker Compose with the `--force-recreate` flag:

```bash
docker compose -p project-nomad -f /opt/project-nomad/compose.yml up -d --force-recreate

```

The `restart: unless-stopped` policy in [`management_compose.yaml`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/management_compose.yaml) also ensures that containers automatically restart after a system reboot, provided they were not manually stopped before the shutdown.

## Updating Docker Containers in Project N.O.M.A.D.

### Automated Update Process

The [`install/update_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/install/update_nomad.sh) script handles the complete update lifecycle: pulling latest images, recreating containers, and preserving persistent data volumes.

The script performs the following steps:
1. Validates that Docker is installed and the Docker daemon is running.
2. Verifies the compose file exists at [`/opt/project-nomad/compose.yml`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main//opt/project-nomad/compose.yml).
3. Executes `docker compose pull` to download the latest image versions.
4. Runs `docker compose up -d --force-recreate` to replace running containers while maintaining volumes (e.g., MySQL data in `nomad_mysql`).

```bash
bash /opt/project-nomad/update_nomad.sh

```

Upon successful completion, the script displays: *"Project N.O.M.A.D installation completed successfully!"* If any step fails, the script aborts immediately to prevent partial updates.

## Summary

- **Container Naming**: All Project N.O.M.A.D. containers use the `nomad_` prefix (e.g., `nomad_admin`, `nomad_mysql`).
- **Management Scripts**: Use [`start_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/start_nomad.sh), [`stop_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/stop_nomad.sh), and [`update_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/update_nomad.sh) from the `install/` directory for standard operations.
- **Compose Project**: The stack runs under the isolated project name `project-nomad` defined in [`install/management_compose.yaml`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/install/management_compose.yaml).
- **Persistence**: Updates via [`update_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/update_nomad.sh) preserve data volumes, ensuring MySQL and Redis data survive container recreation.
- **Auto-Restart**: The `restart: unless-stopped` policy ensures services resume automatically after host reboots.

## Frequently Asked Questions

### Where are the Docker container management scripts located in Project N.O.M.A.D.?

The management scripts are located in the `install/` directory of the repository. After installation, they are typically deployed to `/opt/project-nomad/` on the host system. The three primary scripts are [`start_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/start_nomad.sh), [`stop_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/stop_nomad.sh), and [`update_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/update_nomad.sh).

### What is the naming convention for Project N.O.M.A.D. Docker containers?

All containers use the `nomad_` prefix followed by the service name. For example, the administrative interface runs in `nomad_admin`, the database in `nomad_mysql`, and the caching layer in `nomad_redis`. This naming convention allows the management scripts to identify and target Project N.O.M.A.D. containers specifically.

### How does Project N.O.M.A.D. handle automatic restarts after a system reboot?

The [`install/management_compose.yaml`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/install/management_compose.yaml) file specifies `restart: unless-stopped` for all services. This Docker policy automatically restarts containers when the Docker daemon starts (such as after a host reboot), unless the container was explicitly stopped manually using [`stop_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/stop_nomad.sh) or `docker stop`.

### Will updating Project N.O.M.A.D. containers delete my MySQL or Redis data?

No. The [`update_nomad.sh`](https://github.com/Crosstalk-Solutions/project-nomad/blob/main/update_nomad.sh) script uses `docker compose up -d --force-recreate`, which replaces container instances while preserving named volumes. Both MySQL and Redis data are stored in Docker volumes attached to `nomad_mysql` and `nomad_redis` respectively, ensuring persistent data survives the update process.