${INSTANCE_PREFIX}-${INSTANCE_NUM}:
image: ${IMAGE}
container_name: ${INSTANCE_PREFIX}-${INSTANCE_NUM}
user: root
ports:
- "${GW_PORT}:${GW_PORT}"
- "${SFTP_PORT}:${SFTP_PORT}"
- "${MDNS_PORT_HOST}:${MDNS_PORT}"
- "${GUARDIAN_PORT}:${GUARDIAN_PORT}"
volumes:
# Docker socket and binary (required for sandbox)
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker:ro
- ${CONFIG_DIR_ABS}:/home/node/.openclaw
- ${SKILLS_MERGED_DIR_ABS}:/home/node/.openclaw/skills
- ${SKILLS_MERGED_DIR_ABS}:/home/node/.claude/skills
- ${CONFIG_DIR_ABS}/.claude/settings.json:/home/node/.claude/settings.json
- ${CONFIG_DIR_ABS}/.hermes/config.yaml:/home/node/.hermes/config.yaml
- ${CONFIG_DIR_ABS}/.hermes/.env:/home/node/.hermes/.env
- ${CONFIG_DIR_ABS}/../../plugins/self-improvement-monitor:/tmp/openclaw-self-improvement-monitor:ro
environment:
- HOME=/home/node
- OPENCLAW_HOME=/home/node/.openclaw
- OPENCLAW_STATE_DIR=/home/node/.openclaw
- OPENCLAW_CONFIG_PATH=/home/node/.openclaw/openclaw.json
- CLAUDE_CONFIG_DIR=/home/node/.claude
- OPENCLAW_GATEWAY_PORT=${GW_PORT}
- HEALTH_CHECK_PORT=${GW_PORT}
- HEALTH_CHECK_INTERVAL=30
- HEALTH_CHECK_FAILURE_THRESHOLD=3
- ANTHROPIC_API_KEY=${API_KEY:-dummy-key}
- OPENAI_API_KEY=${API_KEY:-dummy-key}
- GUARDIAN_PORT=${GUARDIAN_PORT}
- SANDBOX_ENABLED=${SANDBOX_ENABLED:-false}
command: /home/node/.openclaw/health_monitor.sh
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:${GW_PORT}/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 60s
deploy:
resources:
limits:
cpus: '2'
memory: 4G
restart: unless-stopped