本地openclaw+ollama
·
# 自定义隔离网络,服务间稳定通信
networks:
openclaw_net:
driver: bridge
# 全局通用环境变量(统一管理,修改一次即可)
x-env: &global-env
OLLAMA_MODEL: qwen2.5:14b-instruct-q5_k_m
OPENCLAW_LOCAL_TOKEN: free_token
TZ: Asia/Shanghai
services:
# ==================== Ollama 核心服务 ====================
ollama:
image: ollama/ollama:latest
container_name: ollama-server
restart: unless-stopped
networks: [openclaw_net]
ports:
- "11434:11434"
volumes:
- ./ollama-data:/root/.ollama
environment:
<<: *global-env
OLLAMA_KEEP_ALIVE: "-1"
OLLAMA_NUM_GPU: 99
OLLAMA_HOST: 0.0.0.0
OLLAMA_MAX_LOADED_MODELS: 1
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
interval: 5s
timeout: 3s
retries: 15
start_period: 20s
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
limits:
cpus: "8"
memory: 24G
# ==================== 模型拉取初始化容器 ====================
ollama-init:
image: ollama/ollama:latest
container_name: ollama-init
networks: [openclaw_net]
depends_on:
ollama: { condition: service_healthy }
environment:
<<: *global-env
OLLAMA_HOST: http://ollama:11434
entrypoint: ["/bin/sh", "-c"]
command: |
echo "==================================="
echo "Ollama 初始化完成,开始拉取模型"
echo "模型:${OLLAMA_MODEL}"
echo "==================================="
sleep 3
retry=5
until [ $retry -le 0 ] || ollama pull ${OLLAMA_MODEL}; do
echo "拉取失败,剩余重试次数:$((retry-1))"
sleep 5
retry=$((retry-1))
done
if [ $retry -le 0 ]; then
echo "模型拉取失败,退出"
exit 1
fi
echo "==================================="
echo "模型拉取成功!"
echo "==================================="
restart: on-failure:3
# ==================== OpenClaw 配置初始化容器 ====================
openclaw-init:
image: ghcr.io/openclaw/openclaw:latest
container_name: openclaw-init
networks: [openclaw_net]
depends_on:
ollama-init: { condition: service_completed_successfully }
volumes:
- ./openclaw-workspace:/home/node/.openclaw
environment:
<<: *global-env
entrypoint: ["/bin/sh", "-c"]
command: |
echo "==================================="
echo "生成 OpenClaw 配置文件"
echo "==================================="
mkdir -p /home/node/.openclaw/workspace
cat > /home/node/.openclaw/openclaw.json << EOF
{
"meta": {
"lastTouchedVersion": "2026.3.24"
},
"models": {
"providers": {
"ollama": {
"baseUrl": "http://ollama:11434",
"apiKey": "ollama",
"api": "ollama",
"models": [
{
"id": "${OLLAMA_MODEL}",
"name": "${OLLAMA_MODEL}",
"contextWindow": 32768,
"maxTokens": 8192
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "ollama/${OLLAMA_MODEL}"
}
}
},
"gateway": {
"mode": "local",
"bind": "lan",
"port": 18789,
"controlUi": {
"enabled": true,
"allowInsecureAuth": true,
"dangerouslyAllowHostHeaderOriginFallback": true,
"dangerouslyDisableDeviceAuth": true
},
"auth": {
"mode": "token",
"token": "${OPENCLAW_LOCAL_TOKEN}"
},
"trustedProxies": ["172.0.0.0/8","192.168.0.0/16","10.0.0.0/8"]
}
}
EOF
echo "==================================="
echo "配置文件生成完成!"
echo "==================================="
# ==================== OpenClaw 网关主服务 ====================
openclaw-gateway:
image: ghcr.io/openclaw/openclaw:latest
container_name: openclaw-gateway
restart: unless-stopped
networks: [openclaw_net]
ports:
- "18789:18789"
volumes:
- ./openclaw-workspace:/home/node/.openclaw
environment:
<<: *global-env
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_LOCAL_TOKEN}
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS: "true"
depends_on:
openclaw-init: { condition: service_completed_successfully }
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:18789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
]
interval: 30s
timeout: 5s
retries: 5
start_period: 20s
command: >
openclaw gateway run
--port 18789
--bind lan
--token ${OPENCLAW_LOCAL_TOKEN}
# ==================== OpenClaw CLI 服务 ====================
openclaw-cli:
image: ghcr.io/openclaw/openclaw:latest
container_name: openclaw-cli
networks: [openclaw_net]
environment:
<<: *global-env
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_LOCAL_TOKEN}
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS: "true"
BROWSER: echo
CLAUDE_AI_SESSION_KEY: ""
CLAUDE_WEB_SESSION_KEY: ""
CLAUDE_WEB_COOKIE: ""
volumes:
- ./openclaw-workspace:/home/node/.openclaw
- ./openclaw-workspace/workspace:/home/node/.openclaw/workspace
stdin_open: true
tty: true
init: true
entrypoint: ["node", "dist/index.js"]
depends_on:
openclaw-gateway:
condition: service_healthy
更多推荐



所有评论(0)