乐于分享
好东西不私藏

把 openclaw 封印在容器里

把 openclaw 封印在容器里

担心 openclaw 把本地文件改了?把它运行在容器中最适合不过了,这样即使它把根目录删了,也只是删除了容器的。

下面在一台安装了 docker 和 docker compose 的 linux 主机上把 openclaw 部署在容器内。

下载 openclaw 镜像

从网址 https://hub.docker.com/r/alpine/openclaw/tags 可查到最新的 openclaw 镜像

拉取镜像到本地
$ docker images | grep openclawEmulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.docker.io/alpine/openclaw     main         6dc4c2dc6c25  36 hours ago  3.16 GB

安装 openclaw

github 项目 openclaw-in-docker 开发了脚本用于一键部署 openclaw 容器,我们下载此项目。

$ git clone https://github.com/ozbillwang/openclaw-in-docker.git$ cd openclaw-in-docker $ ls -latotal 36drwxrwxr-x  3 admin admin 4096 Mar 28 11:52 .drwx------ 10 admin admin 4096 Mar 28 11:52 ..-rw-rw-r--  1 admin admin 1399 Mar 28 11:52 docker-compose.yml-rwxrwxr-x  1 admin admin 6318 Mar 28 11:52 docker-setup.sh-rw-rw-r--  1 admin admin 2663 Mar 28 11:52 .env.exampledrwxrwxr-x  8 admin admin 4096 Mar 28 11:52 .git-rw-rw-r--  1 admin admin    5 Mar 28 11:52 .gitignore-rw-rw-r--  1 admin admin 1740 Mar 28 11:52 README.md
在 openclaw-in-docker 目录查看 .env.example,里面记录了我们可以设置哪些环境变量。这里笔者设置了 openclaw 容器镜像和端口,其他的可以在部署过程中根据提示设置。执行 bash docker-setup.sh 即开始部署,它会自动通过终端交互对 openclaw 进行设置。
$ export OPENCLAW_IMAGE="alpine/openclaw:main" $ export OPENCLAW_GATEWAY_PORT=55930$ export OPENCLAW_BRIDGE_PORT=55931$ bash docker-setup.sh

部署过程中最重要的是设置大模型 api key, 笔者选择的是 MinMax。其他配置若没有准备好可以跳过。

◆  Model/auth provider。。。省略其他信息。。。│  ○ LiteLLM│  ○ Microsoft Foundry│  ● MiniMax (M2.7 (recommended))。。。省略其他信息。。。◆  MiniMax auth method│  ● MiniMax API key (CN) (CN endpoint - api.minimaxi.com)│  ○ MiniMax API key (Global)│  ○ MiniMax OAuth (CN)│  ○ MiniMax OAuth (Global)│  ○ Back◆  Enter MiniMax CN API key (sk-api- or sk-cp-)https://platform.minimaxi.com/user-center/basic-information/interface-key│  _xxxxx换成你买的apixxxxx。。。省略其他信息。。。

安装完毕后如下所示,此部署只是把本机的 /home/admin/.openclaw

目录挂载到容器内,即 openclaw 最多只操作主机的此目录,可以通过网页端放心正常访问 openclaw 了。

$ docker psCONTAINER ID   IMAGE                    COMMAND                  CREATED       STATUS                PORTS                                                                                          NAMES76fa561de403   alpine/openclaw:main     "docker-entrypoint.s…"   6 days ago    Up 5 days (healthy)   0.0.0.0:55930->18789/tcp, :::55930->18789/tcp, 0.0.0.0:55931->18790/tcp, :::55931->18790/tcp   openclaw-in-docker-openclaw-gateway-1$ docker inspect openclaw-in-docker-openclaw-gateway-1。。。省略其他信息。。。        "HostConfig": {            "Binds": [                "/home/admin/.openclaw:/home/node/.openclaw:rw",                "/home/admin/.openclaw/workspace:/home/node/.openclaw/workspace:rw"            ], 。。。省略其他信息。。。

安装python包技巧

openclaw 容器权限做的很绝,如下所示容器运行用户是 node,且没有 root 权限!安装软件咋办?让 openclaw 自己解决,或给它点提示。

docker exec -it openclaw-in-docker-openclaw-gateway-1 bashnode@76fa561de403:/appwhoaminodenode@76fa561de403:/appsudo subash: sudo: command not found

这里举例说明 python 包如何安装。若你的 openclaw 自己在容器内没找到安装方法时,可以参考下面给它个例子即可,之后它就都懂了。

$ curl -sSL https://bootstrap.pypa.io/get-pip.py-o get-pip.py$ export PATH="$HOME/.local/bin:$PATH"$ python3 get-pip.py --user --break-system-packages$ pip install --user --break-system-packages requests

--user:把 pip(和它的依赖,如 setuptools、wheel)安装到你的用户目录,无需 root。对于 openclaw 容器安装目录是 /home/node/.local

--break-system-packages:告诉 pip 忽略“外部管理环境”的保护,否则会报下面的错误。

error: externally-managed-environment

× This environment is externally managed

╰─> To install Python packages system-wide, try apt install

    python3-xyz, where xyz is the package you are trying to

    install.


用容器部署 openclaw 的好处是受主机环境影响小,部署方便快速且安全,值得一试。