
本文档适用于统信UOS服务器版环境下,基于openEuler-20.03-LTS-SP3源部署OpenClaw服务的完整流程,包含环境准备、镜像构建、容器配置、服务启动及验证全步骤,操作命令均经过实测,可直接按步骤执行。详细部署文件可以参考笔者GitHub:https://github.com/xf20054658/China-made-OS/tree/main
操作系统:统信UOS服务器版(兼容aarch64架构) Docker环境:已安装Docker及Docker Compose(建议Docker 20.10+版本) 网络要求:服务器可访问外网(用于拉取基础镜像、安装依赖、下载OpenClaw) 权限要求:操作用户拥有root/sudo权限,可执行Docker命令
在服务器任意目录(如/opt/openclaw-deploy)创建部署目录,并放入以下文件/目录:
Code
/opt/openclaw-deploy/├── Dockerfile # 本手册提供的镜像构建文件├── node22-bin/ # Node.js 22 可执行文件目录(含node、npm等二进制文件)└── docker-compose.yml # 容器编排配置文件(手动创建,本手册提供模板)|-- .env #环境变量注: node22-bin/需为aarch64架构的Node.js 22完整可执行目录,确保文件有可执行权限。
在部署目录/opt/openclaw-deploy/下创建Dockerfile,复制以下内容(已优化冗余命令、配置openEuler源、添加OpenClaw本地模式及跳过配置校验):
Code
# 统信UOS服务器版基础镜像FROM registry.uniontech.com/uos-server-base/uos-server-20-1070e:latestLABEL maintainer="清风"USER root# 移除统信原生源,配置openEuler-20.03-LTS-SP3 aarch64源RUN rm -rf /etc/yum.repos.d/UnionTechOS* && \cat > /etc/yum.repos.d/openEuler.repo << 'EOF'[OS]name=openEuler-20.03-LTS-SP3 - OSbaseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/aarch64/enabled=1gpgcheck=1gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/aarch64/RPM-GPG-KEY-openEuler[update]name=openEuler-20.03-LTS-SP3 - updatebaseurl=https://repo.openeuler.org/openEuler-20.03-LTS-SP3/update/aarch64/enabled=1gpgcheck=1gpgkey=https://repo.openeuler.org/openEuler-20.03-LTS-SP3/OS/aarch64/RPM-GPG-KEY-openEulerEOF# 安装基础依赖(python3、git)RUN dnf install -y --skip-broken python3 && \ dnf install -y git# 安装Node.js 22(本地拷贝二进制文件,无需解压/下载)RUN mkdir -p /usr/local/node22COPY node22-bin/ /usr/local/node22/RUN chmod +x /usr/local/node22/bin/node /usr/local/node22/bin/npmENV PATH=/usr/local/node22/bin:$PATH# 验证Node.js安装RUN node -v && npm -v# 全局安装OpenClaw(国内镜像加速,避免网络问题)RUN npm config set registry http://registry.npmmirror.com && \ npm config set strict-ssl false && \ npm install -g openclaw@latest && \ # 恢复npm默认配置,避免后续依赖安装冲突 npm config set strict-ssl true && \ npm config set registry https://registry.npmjs.org && \ # 验证OpenClaw安装 openclaw -v# 创建node用户(规避root运行风险,赋予家目录权限)RUN id -u node >/dev/null 2>&1 || useradd -m -s /bin/bash node && \ mkdir -p /home/node && \ chown -R node:node /home/node# 工作目录与端口暴露(与OpenClaw默认端口一致)WORKDIR /home/nodeEXPOSE 18789 18790# OpenClaw核心配置:本地模式+环境变量ENV OPENCLAW_GATEWAY_MODE=local# 切换非root用户,启动OpenClaw(--allow-unconfigured跳过配置校验)USER nodeCMD ["openclaw", "gateway", "--bind", "0.0.0.0","--allow-unconfigured"]
在部署目录下创建docker-compose.yml,使用以下模板(配置端口映射、容器持久化、自动重启):
Code
version: '3.8'services: openclaw: build: . image: uos-openclaw:v1.0 # 自定义镜像名+标签 container_name: openclaw-service-uos # 容器名称,固定便于管理 ports: - "19791:18789" # 宿主机API端口:容器内API端口 - "19792:18790" # 宿主机控制台端口:容器内控制台端口 volumes: - /opt/openclaw/data:/home/node # 宿主机数据目录:容器工作目录,持久化配置/数据 restart: unless-stopped # 容器异常退出时自动重启 stdin_open: true tty: true user: node # 以node用户运行容器,与Dockerfile一致
注:宿主机端口 19791/19792可根据实际情况修改,需保证未被占用;/opt/openclaw/data为宿主机持久化目录,会自动创建。
若需灵活修改端口,可在部署目录下创建.env文件,替代docker-compose.yml中的固定端口:
Code
# OpenClaw服务端口配置OPENCLAW_API_PORT=19791OPENCLAW_CTRL_PORT=19792# 宿主机持久化数据目录OPENCLAW_DATA_PATH=/opt/openclaw/data
修改docker-compose.yml的ports和volumes节点,适配环境变量:
Code
ports:
- "${OPENCLAW_API_PORT:-18789}:18789"
- "${OPENCLAW_CTRL_PORT:-18790}:18790"
volumes:
- "${OPENCLAW_DATA_PATH:-/opt/openclaw/data}:/home/node"
进入部署目录:
Code
cd /opt/openclaw-deploy执行Docker镜像构建命令(首次构建需下载基础镜像、安装依赖,耗时约5-10分钟,视网络情况而定):
Code
docker-compose build若未安装Docker Compose,可使用原生Docker命令构建: docker build -t uos-openclaw:v1.0 .
构建完成后,验证镜像是否生成:
Code
docker images | grep uos-openclaw若输出镜像名、标签、ID等信息,说明镜像构建成功。
因首次启动无配置文件会导致容器启动失败,需先启动临时交互式容器,执行openclaw setup完成核心配置:
停止/删除可能存在的失效容器(清理环境):
Code
docker stop openclaw-service-uos 2>/dev/null || truedocker rm openclaw-service-uos 2>/dev/null || true启动临时交互式容器(绕过默认启动命令,直接进入bash):
Code
docker run -it \ --name openclaw-temp \ -u node \ --entrypoint /bin/bash \ -v /opt/openclaw/data:/home/node \ uos-openclaw:v1.0执行成功后,代表已进入容器。
在容器内的交互式终端中,执行以下命令开始配置,全程按回车使用默认配置即可(本地模式推荐默认):
Code
openclaw setupGatewaymode:本地模式直接回车(默认local)
Workspace directory:工作空间默认/home/node/.openclaw,回车
API/Control Port:默认18789/18790,回车(与Dockerfile暴露端口一致)
终端输出
host mounted at http://127.0.0.1:18789/__openclaw__/canvas/ (root /home/node/.openclaw/canvas)
/home/node/.openclaw目录。在容器内执行以下命令,回到宿主机终端:
Code
exit临时容器的配置已自动同步到宿主机持久化目录(因 docker-compose.yml已配置挂载),无需额外拷贝,直接删除临时容器即可:
Code
docker rm openclaw-temp回到部署目录,执行Docker Compose启动命令,后台运行容器:
Code
cd /opt/openclaw-deploydocker-compose up -d验证容器启动状态:
Code
docker ps | grep openclaw-service-uos若输出中STATUS列显示Up,代表容器启动成功。
执行以下命令,查看OpenClaw启动日志,无Missing config报错即代表配置生效:
Code
docker logs openclaw-service-uosCode
OpenClaw 2026.3.13 (61d171a) I'll refactor your busywork like it owes me money.10:20:27 Config overwrite: /home/node/.openclaw/openclaw.json (sha256 dc7a7982d2bef7ad147542798f4f74a230494e8f02fb13d6caca287ef4322041 -> 97c3c63d64ca0a96b8996c364a94d0e51c09f1921380a2be3aaa7b4497cff32d, backup=/home/node/.openclaw/openclaw.json.bak)10:20:27 [gateway] auth token was missing. Generated a new token and saved it to config (gateway.auth.token).10:20:27 [canvas] host mounted at http://127.0.0.1:18789/__openclaw__/canvas/ (root /home/node/.openclaw/canvas)10:20:27 [heartbeat] started10:20:27 [health-monitor] started (interval: 300s, startup-grace: 60s, channel-connect-grace: 120s)10:20:27 [gateway] agent model: anthropic/claude-opus-4-610:20:27 [gateway] listening on ws://127.0.0.1:18789, ws://[::1]:18789 (PID 13)10:20:27 [gateway] log file: /tmp/openclaw-1000/openclaw-2026-03-21.log10:20:27 [browser/server] Browser control listening on http://127.0.0.1:18791/ (auth=token)仅显示OpenClaw版本和Gateway online提示,无持续的配置缺失报错。
进入运行中的容器,验证OpenClaw进程是否正常:
Code
# 进入容器交互式终端docker exec -it -u node openclaw-service-uos /bin/bash# 验证OpenClaw命令是否可用openclaw -v# 退出容器exit在服务器本地,执行以下命令验证端口是否监听(替换为实际配置的宿主机端口):
Code
# 验证19791端口telnet 127.0.0.1 19791# 或使用netstatnetstat -tulpn | grep 19791若显示Connected to 127.0.0.1或端口处于LISTEN状态,代表端口映射成功。
Code
# 启动服务docker-compose up -d# 停止服务docker-compose down# 重启服务docker-compose restart# 查看实时日志docker logs -f openclaw-service-uos# 进入容器操作docker exec -it -u node openclaw-service-uos /bin/bashCode
# 删除失效容器docker rm $(docker ps -a -f status=exited -q)# 删除无用镜像docker rmi $(docker images -f dangling=true -q)宿主机/opt/openclaw/data目录为OpenClaw的核心数据目录,包含配置、工作空间、会话数据,备份时直接打包该目录即可:
Code
tar -zcvf openclaw-data-backup-$(date +%Y%m%d).tar.gz /opt/openclaw/dataport is already allocated原因:宿主机配置的端口(如19791/19792)被其他进程/容器占用。
解决:
查找占用端口的进程:
Code
netstat -tulpn | grep 19791杀死占用进程(替换 <PID>为实际进程ID):
Code
kill -9 <PID>或修改 docker-compose.yml/.env中的宿主机端口,重新启动。
Missing config原因:未执行openclaw setup初始化配置,或配置文件未持久化。
解决:重新执行第四章的临时容器配置步骤,确保配置文件生成后再启动正式容器。
dnf: command not found原因:统信UOS基础镜像未自带dnf,或源配置失败。
解决:检查Dockerfile中openEuler.repo的baseurl是否正确,确保服务器可访问openEuler源,或替换为yum命令(部分UOS版本为yum)。
原因:服务器防火墙/安全组未开放端口,或端口映射配置错误。
解决:
- 开放宿主机端口(以firewalld为例):
Code
firewall-cmd --add-port=19791/tcp --permanentfirewall-cmd --add-port=19792/tcp --permanentfirewall-cmd --reload- 检查云服务器安全组,放行对应的端口。
OpenClaw服务部署完成后,可通过宿主机IP+配置端口访问服务,默认本地访问地址为http://127.0.0.1:19791(API端口)、http://127.0.0.1:19792(控制台端口)。
服务为后台常驻运行,容器配置了restart: unless-stopped,服务器重启后会自动启动,无需手动操作。
关注“数字化与AI之知与行”

<===> END <===>

夜雨聆风