runlike解决:从docker run容器读取docker run命令
runlike 是一个 Docker 容器“反向生成 docker run 命令”的工具。
它会读取docker inspect中的配置,然后还原出docker run …
适用于:
- 容器迁移
- 容器备份
- docker run 参数恢复
- 从历史容器生成启动脚本
- bind mount 修改
- docker-compose 转换前分析
- 灾难恢复
本质上:
1 | container metadata -> docker run command |
1.安装runlike
1.1pip安装runlike
1 | pip install runlike |
或者:
1 | pip3 install runlike |
验证:
1 | runlike --version |
1.2 Docker 方式运行
如果宿主机不想安装 Python 包:
1 | docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ |
例如:
1 | docker run --rm \ |
2.基本用法
2.1 查看容器启动命令
1 | runlike redis # runlike container_name/id |
输出:
1 | docker run \ |
3.典型应用场景
3.1 迁移 bind mount
1 | -v /home/crabai/redis:/data -> -v /data/docker-data/redis:/data |
流程:
flowchart LR A[runlike 导出] --> B[修改 volume] B --> C[删除旧容器] C --> D[重新运行]
3.2导出docker run运行命令
旧服务器:
1 | runlike mysql > mysql.sh |
新服务器:
1 | #bash mysql.sh |
快速恢复。
4.runlike 内部原理
它本质读取:docker inspect
然后映射:
| inspect 字段 | docker run 参数 |
|---|---|
| Env | –env |
| Mounts | -v |
| Ports | -p |
| RestartPolicy | –restart |
| NetworkMode | –network |
| Cmd | command |
| Entrypoint | –entrypoint |
| 最终拼接。 |
5.runlike 的局限性
不能 100% 还原,有些内容恢复不了:
| 内容 | 原因 |
|---|---|
| shell history | Docker 不保存 |
| 动态 entrypoint 行为 | inspect 无法推断 |
| compose 逻辑 | 已丢失 |
| depends_on | 容器级别无概念 |