services: # --- LLM ENGINE --- ollama: build: context: ./ollama args: - BASE_IMAGE=ollama/ollama:latest container_name: ollama restart: always shm_size: ${SHM_SIZE} devices: - ://nvidia.com volumes: - ./storage/ollama_models:/root/.ollama environment: - OLLAMA_HOST=0.0.0.0:11434 - MODEL_LIST=${MODEL_LIST} - OLLAMA_KEEP_ALIVE=${OLLAMA_KEEP_ALIVE} - OLLAMA_FLASH_ATTENTION=1 - NVIDIA_VISIBLE_DEVICES=all ports: - "11434:11434" dns: - ${DNS_SERVER} networks: - net.ghost.openclaw # --- CORE AGENT (GATEWAY) --- agent: build: context: ./openclaw dockerfile: Containerfile container_name: openclaw-agent user: "0:0" depends_on: - ollama environment: - OPENCLAW_GATEWAY_MODE=local - OPENCLAW_GATEWAY_PASSWORD=${OPENCLAW_PASSWORD} - OPENCLAW_CONFIG_PATH=/home/node/.openclaw/openclaw.json - OPENCLAW_STATE_DIR=/home/node/.openclaw - OLLAMA_URL=http://127.0.0.1:11434 - OLLAMA_API_KEY=ollama-local - DOCKER_HOST=unix:///var/run/docker.sock - OPENCLAW_SANDBOX_UIDSHIFT=${OPENCLAW_SANDBOX_UIDSHIFT} - OPENCLAW_SANDBOX_HOST_WORKSPACE=${OPENCLAW_SANDBOX_HOST_WORKSPACE} - OPENCLAW_SANDBOX_CONTAINER_WORKSPACE=${OPENCLAW_SANDBOX_CONTAINER_WORKSPACE} ports: - "8080:8080" volumes: - ${HOST_OPENCLAW_JSON_PATH}:/home/node/.openclaw/openclaw.json${HOST_OPENCLAW_CONFIG_MOUNT_OPTS} - ${HOST_WORKSPACE_PATH}:/home/node/.openclaw/workspace${HOST_OPENCLAW_WORKSPACE_MOUNT_OPTS} - ${HOST_DOCKER_SOCKET_PATH}:/var/run/docker.sock${HOST_DOCKER_SOCKET_MOUNT_OPTS} - ${HOST_REPOS_PATH}:/repos${HOST_REPOS_MOUNT_OPTS} networks: - net.ghost.openclaw # --- NETWORK TUNNEL (SIDECAR) --- ollama-bridge: image: docker.io/alpine/socat:latest container_name: openclaw-ollama-bridge depends_on: - agent network_mode: "service:agent" command: TCP-LISTEN:11434,fork TCP:ollama:11434 stop_grace_period: 1s restart: always networks: net.ghost.openclaw: driver: bridge