一款轻量级、无依赖的 Bash 脚本,仅需 curl、dd、od 和 awk,即可在 Docker 容器内获得模拟交互式 Shell。无需 Python、无需 jq、无需编辑器。
专为仅有原始 Shell 访问权限、需通过 Docker Engine API 在 Docker 容器内执行命令的环境而设计。
该脚本不依赖 Docker CLI,而是直接与 Docker Engine REST API 通过 HTTP 通信(在 Docker Desktop / WSL2 环境中,默认暴露于 http://192.168.65.7:2375)。
执行流程:
C:\ 驱动器dd + od 解析 Docker 的输出——无需 PythonDocker 将所有 exec 输出封装为二进制帧格式:
[1 字节:流类型] [3 字节:填充] [4 字节:负载大小(大端序)] [负载...]
本脚本仅使用标准 Unix 工具逐帧解码该格式。
bashcurldd、od、awk、grep、cut —— 全部为标准 Unix 工具http://192.168.65.7:2375 访问(Docker Desktop on WSL2)无需 jq、无需 Python、无需 nano、无需编辑器。
git clone https://github.com/yourusername/docker-shell.git
cd docker-shell
chmod +x docker_shell.sh
bash docker_shell.sh
================================================
Docker 模拟 Shell [目标容器: alpine_escape]
命令: start | status | run <cmd> | exit
================================================
docker> start
docker> status
docker> run ls /mnt
docker> run ls /mnt/Users
docker> run cat /etc/os-release
docker> run id
docker> exit
| 命令 | 描述 |
|---|---|
start | 创建(如需要)并启动 alpine_escape 容器 |
status | 显示容器 ID 和当前状态 |
run <cmd> | 在容器内执行任意 Shell 命令 |
exit / quit | 退出模拟 Shell |
容器通过 WSL2 挂载 Windows C:\ 驱动器到 /mnt:
| Windows 路径 | 容器内路径 |
|---|---|
C:\ | /mnt |
C:\Users | /mnt/Users |
C:\Program Files | /mnt/Program Files |
C:\Windows\System32 | /mnt/Windows/System32 |
run 是独立的 exec 实例——命令之间的状态不会保留。如需链式执行,请使用 run cd /some/dir && ls 单次调用。alpine_escape)而非 ID 来定位容器,因此不会意外执行到错误的容器中。/tmp/docker_out.bin 通过 dd 逐帧解析。修改脚本顶部的以下变量以匹配你的环境:
DOCKER="http://192.168.65.7:2375" # Docker Engine API 地址
CONTAINER="alpine_escape" # 容器名称
AGPLv3