
軽量で依存関係のない bash スクリプトで、Docker コンテナ内にエミュレートされた対話型シェルを提供します。使用するのは curl、dd、od、awk だけです。Python も jq もエディタも不要です。
生のシェルアクセスのみが利用可能で、Docker Engine API を介して Docker コンテナ内でコマンドを実行する必要がある環境向けに作られています。
Docker CLI を使う代わりに、このスクリプトは HTTP 経由で Docker Engine REST API に直接通信します(通常、Docker Desktop / WSL2 環境では http://192.168.65.7:2375 で公開されています)。
C:\ ドライブをマウントした Alpine Linux コンテナを作成・起動しますdd + od を使って Docker の多重化バイナリストリーム出力を解析します — Python は不要ですDocker はすべての exec 出力をバイナリフレーミング形式でラップします:
[1 byte: stream type] [3 bytes: padding] [4 bytes: payload size (big-endian)] [payload...]
このスクリプトは、標準 Unix ツールのみを使用してそのフレームを 1 つずつデコードします。
bashcurldd, od, awk, grep, cut — すべて標準 Unix ツールhttp://192.168.65.7:2375 でアクセス可能な Docker Engine API(WSL2 上の Docker Desktop)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 Emulated Shell [target: alpine_escape]
Commands: 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
コンテナは、WSL2 経由で Windows の C:\ ドライブを /mnt にマウントします:
| Windows のパス | コンテナ内のパス |
|---|
run は独立した exec インスタンスです。コマンド間で状態は保持されません。run cd /some/dir && ls のように使って、1 回の呼び出しでコマンドを連結してください。alpine_escape)で指定するため、誤って別のコンテナに exec することはありません。dd を使用してバイナリファイル /tmp/docker_out.bin からフレーム単位で直接解析されます。環境に合わせて、スクリプト先頭の次の変数を編集してください:
DOCKER="http://192.168.65.7:2375" # Docker Engine API address
CONTAINER="alpine_escape" # Container name
AGPLv3
| コマンド | 説明 |
|---|
start | 必要に応じて alpine_escape コンテナを作成し、起動します |
status | コンテナ ID と現在の状態を表示します |
run <cmd> | コンテナ内で任意のシェルコマンドを実行します |
exit / quit | エミュレートされたシェルを終了します |
C:\ | /mnt |
C:\Users | /mnt/Users |
C:\Program Files | /mnt/Program Files |
C:\Windows\System32 | /mnt/Windows/System32 |