Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/hosenur/portal/llms.txt

Use this file to discover all available pages before exploring further.

OpenCode Portal supports running OpenCode in Docker containers, providing isolation and easier deployment management.

Overview

OpenPortal can run OpenCode in a Docker container while keeping the web UI as a host process. This provides:
  • Isolated OpenCode environment
  • Consistent runtime across different systems
  • Easy cleanup and management
  • No need to install OpenCode locally

Prerequisites

1

Install Docker

Ensure Docker is installed and running on your system.
# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Add your user to docker group
sudo usermod -aG docker $USER

# Log out and back in for group changes to take effect
Verify Docker installation:
docker --version
docker ps
2

Install Bun

OpenPortal requires Bun to run the web UI:
curl -fsSL https://bun.sh/install | bash
3

Install OpenPortal

Install OpenPortal globally:
bun install -g openportal
You do NOT need to install OpenCode when using Docker mode - the container includes it.

Running with Docker

Start OpenCode + Web UI in Docker Mode

Use the --docker flag to run OpenCode in a container:
cd /path/to/your/project
openportal --docker
This will:
  1. Pull the OpenCode Docker image (if not already available)
  2. Create and start a container with your project directory mounted
  3. Start the web UI on the host

Start Only OpenCode Server in Docker

openportal run --docker
This starts only the OpenCode server in a Docker container without the web UI.

Docker Configuration

Default Docker Image

By default, OpenPortal uses:
ghcr.io/anomalyco/opencode:1.1.3

Custom Docker Image

You can specify a custom OpenCode Docker image using the OPENCODE_DOCKER_IMAGE environment variable:
OPENCODE_DOCKER_IMAGE=ghcr.io/anomalyco/opencode:latest openportal --docker
Or export it for persistent use:
export OPENCODE_DOCKER_IMAGE=ghcr.io/anomalyco/opencode:latest
openportal --docker

Remote Docker Host

To connect to a remote Docker daemon, use the DOCKER_HOST environment variable:
# TCP connection
export DOCKER_HOST=tcp://192.168.1.100:2375
openportal --docker

# Unix socket (default)
export DOCKER_HOST=unix:///var/run/docker.sock

# Windows named pipe
export DOCKER_HOST=npipe:////./pipe/docker_engine

CLI Options with Docker

All standard OpenPortal options work with Docker mode:

Custom Ports

# Custom web UI and OpenCode ports
openportal --docker --port 8080 --opencode-port 5000

Custom Directory

# Run in specific directory
openportal --docker -d /path/to/project

Custom Instance Name

# Name your container instance
openportal --docker --name my-project

Hostname Binding

# Bind to specific hostname
openportal --docker --hostname 0.0.0.0

Managing Docker Instances

List Running Instances

openportal list
Output includes Docker container information:
ID      NAME            TYPE      PORT  OPENCODE  STATUS      DIRECTORY
abc123  my-project      docker    3000  4000      running     /home/user/project

Stop Docker Instances

# Stop instance in current directory
openportal stop

# Stop specific instance
openportal stop --name my-project
This will:
  1. Stop the Docker container
  2. Remove the container (auto-cleanup)
  3. Stop the web UI process

Clean Up Stale Entries

openportal clean
Removes stopped containers and cleans up configuration entries.

Volume Mounts

OpenPortal automatically mounts your project directory into the container:
/path/to/your/project -> /path/to/your/project (read-write)
The container’s working directory is set to your project path, so OpenCode operates on your files directly.
For security, OpenPortal prevents mounting sensitive system directories like /, /etc, /usr, etc.

Port Mapping

The OpenCode server port is exposed from the container:
Container Port -> Host Port
4000 (or custom) -> 4000 (or custom)
The web UI runs on the host and connects to the containerized OpenCode server via the exposed port.

Container Lifecycle

Container Naming

Containers are automatically named:
openportal-{instance-name}-{random-id}
Example: openportal-my-project-a1b2c3d4

Auto-Removal

Containers are created with the AutoRemove flag, meaning they’re automatically removed when stopped.

Container Logs

View container logs directly:
# Get container ID from openportal list
openportal list

# View logs
docker logs <container-id>

# Follow logs
docker logs -f <container-id>

Advanced Docker Usage

Multiple Projects

Run multiple projects simultaneously:
# Terminal 1
cd /path/to/project-a
openportal --docker --port 3000 --opencode-port 4000

# Terminal 2
cd /path/to/project-b
openportal --docker --port 3001 --opencode-port 4001

Server-Only Mode with Docker

Run only the OpenCode server in Docker:
openportal run --docker
This is useful when:
  • You want to use a different UI
  • You’re integrating with external tools
  • You only need the OpenCode API

Inspecting Containers

# List all OpenPortal containers
docker ps -a | grep openportal

# Inspect a specific container
docker inspect <container-id>

# Execute commands in the container
docker exec -it <container-id> /bin/bash

Environment Variables

OPENCODE_DOCKER_IMAGE

Specify the OpenCode Docker image to use:
export OPENCODE_DOCKER_IMAGE=ghcr.io/anomalyco/opencode:1.1.3

DOCKER_HOST

Specify the Docker daemon connection:
# TCP connection
export DOCKER_HOST=tcp://localhost:2375

# Unix socket (default on Linux/macOS)
export DOCKER_HOST=unix:///var/run/docker.sock

# Named pipe (Windows)
export DOCKER_HOST=npipe:////./pipe/docker_engine

DEBUG

Enable debug output for troubleshooting:
export DEBUG=1
openportal --docker

Troubleshooting

Docker Image Pull Issues

If the image fails to pull:
# Manually pull the image
docker pull ghcr.io/anomalyco/opencode:1.1.3

# Verify the image exists
docker images | grep opencode

Container Won’t Start

Check container logs:
# List all containers (including stopped)
docker ps -a | grep openportal

# View logs
docker logs <container-id>

Port Already in Use

Specify different ports:
openportal --docker --port 8080 --opencode-port 5000

Volume Mount Errors

Ensure the path is absolute:
# Bad - relative path
openportal --docker -d ./my-project

# Good - absolute path
openportal --docker -d /home/user/my-project

Permission Issues

On Linux, ensure your user is in the docker group:
sudo usermod -aG docker $USER
# Log out and back in

Container Not Stopping

Manually stop and remove:
# List containers
docker ps | grep openportal

# Force stop
docker stop <container-id>

# Force remove
docker rm <container-id>

# Clean up config
openportal clean

Connection Refused

Verify the container is running and port is exposed:
# Check container status
docker ps | grep openportal

# Check port mapping
docker port <container-id>

Benefits of Docker Mode

Isolation

  • OpenCode runs in an isolated environment
  • No interference with host system packages
  • Clean separation of concerns

Consistency

  • Same OpenCode version across all environments
  • Reproducible builds and deployments
  • Easy version management via image tags

Easy Cleanup

  • Containers auto-remove when stopped
  • No residual files on host system
  • Simple instance management

No Local Installation

  • No need to install OpenCode on host
  • No dependency conflicts
  • Works on any system with Docker

Next Steps