3.5 KiB
WorkPod Alpine 问题记录
最后更新:2026-04-02
Alpine 无 ss 命令
HEALTHCHECK 使用 ss -tlnp 报错 ss: not found。
解决:改用 busybox 内置的 netstat -tlnp。
docker-compose healthcheck 覆盖镜像 HEALTHCHECK
修复了 Dockerfile 中的 HEALTHCHECK,但容器仍报 ss 错误。
原因:docker-compose.yml 中的 healthcheck: 字段会覆盖镜像的 HEALTHCHECK 指令。
解决:同步修改 docker-compose.yml 中的 healthcheck 命令。
COPY --chmod 需要 BuildKit
COPY --chmod=755 entrypoint.sh /entrypoint.sh 报错 the --chmod option requires BuildKit。
解决:拆为两步:
COPY entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh
BuildKit 缓存不失效 HEALTHCHECK
修改 HEALTHCHECK 后重新 build,镜像中仍是旧命令。
原因:BuildKit 缓存了 HEALTHCHECK 的 metadata 层。
解决:使用 DOCKER_BUILDKIT=0 经典构建器。
ttyd execvp failed: No such file or directory
ttyd 启动命令使用了容器中不存在的程序(如 claude、tmux)。
原因:ttyd 子进程的 PATH 可能不完整,或镜像未安装对应软件。
解决:确保 ttyd 启动的命令在镜像中已安装,且使用完整路径或先验证可用性。
ttyd 静态资源 404
浏览器访问 ttyd 时 style.css、js 等 404。
说明:ttyd 1.7.4 将资源内联到 HTML 中,单独文件的 404 是预期行为,页面功能正常。
容器重建丢失数据
docker compose down && up 后 /root 下的 Rust 安装等文件丢失。
原因:只有 bind mount 的路径才会持久化,未挂载的目录随容器销毁。
解决:将需要持久化的目录通过 volumes 挂载。
ttyd 断线后会话丢失
ttyd 默认启动 bash,断线后进程被 kill,会话无法恢复。
解决:使用 tmux new -A -s workpod 替代 bash,需要镜像安装 tmux。
Web 终端中文输入不了
ttyd + tmux 环境下无法输入中文字符。
原因:容器未设置 LANG 环境变量,终端无 UTF-8 编码支持。
解决:添加 LANG=C.UTF-8 到 Dockerfile ENV 和 docker-compose environment。
tmux 多用户共享同一 session
使用 tmux new -A -s workpod 时所有用户进入同一个 session,互相可见。
解决:通过 ttyd-session.sh 脚本实现 session 选择——支持 URL 参数 ?session=name 直接进入,或交互式菜单选择/创建。
注意:tmux attach-session -d 会踢掉旧连接,应使用 tmux attach-session(不加 -d)实现共享模式。
容器重建后手动安装的工具丢失
在容器内手动安装的工具,解压到 /usr/local 等非挂载目录的会在重建后丢失。
解决:所有工具解压到 /root 下,entrypoint 自动检测并设置 PATH。
安装方式
| 工具 | 安装命令 | 存储位置 |
|---|---|---|
| Rust | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
/root/.cargo /root/.rustup |
| Python | curl https://pyenv.run |
/root/.pyenv |
| Go | tar -xzf go1.xx.linux-amd64.tar.gz -C /root |
/root/go |
| pip 用户包 | pip install --user xxx |
/root/.local |
原则
- 解压目录用
/root而不是/usr/local - 不要用
apk add装开发工具(重建会丢),需要的加到 Dockerfile - entrypoint 自动检测
/root下的工具目录,写入/etc/profile.d/dev-tools.sh