我终于把「手机远程控制 Linux 服务器上的 Codex」跑通了
这篇文章记录了我把“手机远程控制 Linux 服务器上的 Codex CLI”完整跑通的过程。核心方案是用 Docker/1Panel 部署 Codex,通过
device-auth登录并开启remote-control,再配合 tmux 常驻,让手机 ChatGPT App 可以远程控制服务器上的 Codex。
文章概述
本文不是单纯的安装记录,而是一份踩坑后的实战复盘:从为什么建议用 Docker 部署 Codex,到 remote-control 连不上、alreadyRunning、token_revoked、OpenClaw MCP 401 等问题的排查与解决。适合想把服务器变成远程 AI DevBox、希望用手机随时控制 Codex 的用户参考。
文章结构
- 部署方案:为什么推荐 Docker + 1Panel,以及 compose 配置要点
- 远程控制:开启 Remote Feature、正确登录、手机连接流程
- 问题排查:解决
alreadyRunning、授权循环、OpenClaw MCP 401 - 稳定运行:用 tmux 常驻 remote-control,避免 SSH 断开影响使用
- 踩坑 QA:整理 Codex installer、OAuth token、Linux Docker Preview 等常见问题
这两天一直在折腾一个东西:
能不能直接用手机控制服务器上的 Codex CLI?
结果没想到,从 Docker、bubblewrap、remote-control、OAuth token,到 OpenClaw MCP,全都踩了一遍坑。
不过好消息是:
现在已经完整跑通:
- Linux 服务器
- Docker
- 1Panel
- Codex CLI
- 手机 ChatGPT App Remote Control
- OpenClaw
并且手机已经可以直接控制服务器上的 Codex 了。
这里我把整个过程整理成一篇真正能落地的教程。
很多网上教程已经过时了,尤其 Codex installer 现在的路径、remote-control feature、Linux Preview 问题,都和几周前完全不一样。
所以如果你最近也在折腾:
Linux + Docker + Codex Remote
这篇应该能帮你少踩很多坑。
一、为什么推荐 Docker 部署 Codex
一开始我也尝试过:
npm install -g @openai/codex
直接装在服务器上。
但后面会发现:
- Node 环境容易乱
- 多项目不好隔离
- remote-control 经常炸
- OpenClaw 共用 token 时容易冲突
- 依赖缺失后很难排查
所以后面还是换成了:
Docker + 1Panel
整体会稳定很多。
尤其:
codex-home volume 持久化
非常重要。
否则:
- 登录状态会丢
- remote-control 会失效
- token 会重新授权
二、推荐的 Docker Compose
推荐大家使用服务器跑Linux的原因是,服务器上服务IP比较固定,手机直接控制Codex的话,大量的访问会以这个IP来进出,这样有效避免账号风控,同时他可以24h在线,完全不用担心服务掉线。
RackNerd最低只需要150人民币多你就可以拥有一个一年的境外服务器,一个月才12人民币,你的魔法每月恐怕都不止这个钱。
这性价比放在整个行业都是炸裂的存在。RackNerd已经运行了十年,算是比较老牌的服务商,不用担心会跑路
https://my.racknerd.com/aff.php?aff=19908
说到正题,我现在最终稳定使用的是:
services:
codex:
image: node:22-bullseye
container_name: codex
restart: unless-stopped
privileged: true
stdin_open: true
tty: true
working_dir: /workspace
security_opt:
- seccomp=unconfined
- apparmor=unconfined
cap_add:
- SYS_ADMIN
environment:
- PATH=/root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- CODEX_HOME=/root/.codex
volumes:
- ./workspace:/workspace
- ./codex-home:/root
command: >
bash -lc "
apt update &&
apt install -y \
git \
curl \
ca-certificates \
bubblewrap \
ripgrep \
fd-find \
python3 \
nano \
tmux &&
curl -fsSL https://chatgpt.com/codex/install.sh | sh &&
tail -f /dev/null
"
这里有几个关键点。
1. 不要使用 alpine
一开始我用了:
node:alpine
后面问题不断:
- bubblewrap 缺失
- bash 不存在
- apt 没有
- remote-control 异常
最后换成:
node:22-bullseye
稳定了很多。
2. 不要使用 npm 全局安装版
这是目前最容易踩的坑。
很多教程写的是:
npm install -g @openai/codex
但实际上:
remote-control 不认 npm 版
真正需要的是:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
这个 standalone installer。
3. bubblewrap 很重要
如果缺少:
bubblewrap
会出现:
Codex could not find bubblewrap on PATH
虽然不一定完全不能用。
但:
- remote-control
- workspace-write
- agent
- apply_patch
会非常不稳定。
所以 compose 里一定记得:
apt install -y bubblewrap
三、Remote Control 为什么连不上
我一开始最大的目标,就是:
手机直接控制服务器上的 Codex
结果最开始一直:
- 无限授权循环
- alreadyRunning
- 手机上不显示设备
- token_revoked
后来才发现:
Linux Docker 下现在还是 Preview 状态。
很多网上教程根本没提 feature flag。
四、一定要开启 Remote Feature
进入容器:
docker exec -it codex bash
编辑:
nano ~/.codex/config.toml
增加:
[features]
remote_control = true
remote_connections = true
这一步非常关键。
否则:
手机根本发现不了设备
五、正确的登录方式
我非常建议:
codex login --device-auth
不要使用 callback 登录。
因为 Linux Docker 下 callback 经常:
- 授权循环
- 无法回调
- App 跳转失败
device-auth 稳定很多。
六、手机连接方式
执行:
codex remote-control
然后:
打开手机 ChatGPT App:
左上角
→ Codex
→ Devices / Machines
正常就会看到:
codex
online
然后手机就可以:
- approve agent
- 查看任务
- 远程执行
- 查看 workspace
体验其实已经很像:
Cursor Remote AI Agent
了。
七、为什么会出现 alreadyRunning
这是我卡了最久的问题。
执行:
codex remote-control
结果提示:
{
"status":"alreadyRunning"
}
其实是:
旧 app-server daemon 卡住了
解决方法:
先查看:
ps aux | grep codex
例如:
553
就是 PID。
然后:
kill -9 553
删除 socket:
rm -rf /root/.codex/app-server-control
重新:
codex remote-control
就恢复了。
八、OpenClaw 为什么也一起炸了
这个其实很有意思。
我原本只是:
Codex Remote Control 授权失效
结果发现:
OpenClaw MCP 也 401 了
错误类似:
token_revoked
Encountered invalidated oauth token
后来才发现:
OpenClaw 和 Codex CLI 用的是同一个 OAuth token
而 remote-control 最近会:
- 刷新 token
- 回收旧 refresh_token
- 导致 MCP 同时失效
所以现在 Linux Docker 场景下:
多个 Codex 客户端
真的很容易互相踢 token。
九、我是怎么解决 token_revoked 的
最后稳定方案其实很简单:
彻底删缓存:
rm -rf ~/.codex/auth.json
rm -rf ~/.codex/device.json
rm -rf ~/.codex/session*
重新:
codex login --device-auth
然后:
codex remote-control
最后重启 OpenClaw:
docker restart openclaw
基本就恢复了。
十、tmux 非常推荐
因为:
remote-control 需要后台常驻
所以推荐:
tmux new -s codex
启动:
codex remote-control
退出:
Ctrl+B
D
这样即使 SSH 断开:
手机仍然可以控制服务器上的 Codex
这点真的很爽。
十一、现在这套方案已经很接近 AI DevBox 了
目前:
- 服务器跑 Codex
- 手机远程 approve
- OpenClaw 自动化
- tmux 后台 agent
- Docker 隔离环境
整个体验已经有点:
AI Agent 运维中枢
的感觉了。
尤其:
手机远程控制服务器上的 AI Agent
这个方向,未来一定会越来越普及。
QA:一些踩坑总结
Q1:为什么 codex 命令突然失效?
因为新版 installer 安装到了:
/root/.local/bin
不是旧教程里的:
~/.codex/bin
Q2:为什么 remote-control 不认 npm 安装版?
因为:
remote-control 只支持 standalone installer
必须:
curl -fsSL https://chatgpt.com/codex/install.sh | sh
Q3:为什么手机一直授权循环?
一般是:
- callback 登录
- 微信浏览器
- App 版本太旧
- token 已失效
推荐:
codex login --device-auth
Q4:为什么 OpenClaw MCP 会 401?
因为:
remote-control 刷新了 OAuth token
导致 OpenClaw 里的 token 失效。
Q5:为什么 Linux Docker 问题特别多?
因为:
目前官方主要支持的是 Mac + ChatGPT App
Linux Docker 还属于 Preview 阶段。
不过:
已经可以正常用了
只是需要多踩一些坑。
