【技术攻略】DockerTools - Docker 容器配置导出工具
📋 项目简介
给大家分享一个自己开发并开源的 Docker 容器管理工具 - DockerTools。
这是一个 Docker 容器配置导出工具,主要功能是将运行中的 Docker 容器导出为 docker-compose.yml 配置文件,支持敏感信息分离、隐私保护和批量导出。
GitHub 地址:https://github.com/MG5921MY/docker-tools-public.git
开源协议:MIT License
开发语言:Shell Script (Bash)
✨ 核心功能
1. 配置导出
- 🔄 将运行中的容器一键导出为 docker-compose.yml
- 📦 支持批量导出所有运行中的容器
- 📋 支持从文本文件按行读取容器名批量导出
- 🎯 自动识别容器的所有配置(端口、环境变量、数据卷等)
- 🔍 智能识别容器的网络模式、重启策略、资源限制等
2. 安全增强
- 🔒 敏感信息分离:自动将密码、密钥等敏感信息分离到 .env 文件
- 🛡️ 隐私保护:支持
--privacy模式隐藏主机路径 - 🔍 智能检测:内置 50+ 敏感关键词自动识别
- ⚙️ 自定义关键词:支持通过 config 文件添加项目特定的敏感词
- ❌ 排除机制:支持标记某些变量为非敏感(使用
!前缀)
3. 安全防护
- 🔐 容器名路径遍历攻击防护
- 🛡️ 核心系统目录保护(防止输出到 /etc、/bin 等)
- ⚠️ yml 模式敏感信息警告系统
- 📝 智能配置提示(原容器不存在的配置以注释形式提供)
- 🔐 三重确认机制(输出到危险目录时)
4. 导出模式
- yml 模式(默认):快速导出,环境变量明文显示
- env 模式(推荐):敏感信息分离,使用
${VAR}引用
5. 其他特性
- 🌐 UTF-8 编码支持(完美处理中文环境变量)
- 📁 安全默认输出目录(./output/)
- 📝 自动生成完整的 README 和使用文档
- 🔗 env 模式自动生成 .env.example 模板
- 📋 自动生成 .gitignore 文件
- 🎨 支持模拟运行(--dry-run)
- 🔇 支持静默模式(--quiet)
- ♻️ 智能文件命名(自动递增或覆盖)
🎯 适用场景
场景 1:容器配置迁移
- 从
docker run命令迁移到 Docker Compose - 服务器迁移时批量导出所有容器配置
- 重装系统前备份容器配置
- 将传统容器管理方式升级为 Compose 编排
场景 2:团队协作
- 安全地分享容器配置给团队成员
- 将容器配置纳入 Git 版本控制
- 提供 .env.example 模板,各自填写敏感信息
- 标准化团队的容器配置格式
场景 3:生产环境部署
- 使用安全模式导出生产环境配置
- 敏感信息分离,符合安全规范
- 定期备份容器配置
- 容器配置文档化和审计
场景 4:学习和文档化
- 自动生成容器配置文档
- 学习现有容器的配置结构
- 快速复现开发环境
- Docker 教学和培训
场景 5:批量管理
- 从文件列表批量导出多个容器
- 导出所有运行中或停止的容器
- 定期自动化备份脚本
- 批量迁移容器到新环境
⚠️ 重要提醒(必读)
本工具的功能范围
✅ 本工具会导出:
- 容器的配置信息(环境变量、端口映射、数据卷路径等)
- docker-compose.yml 配置文件
- .env 文件(敏感信息)
- .env.example 模板文件
- 容器的网络模式、重启策略、资源限制
- Capabilities、Devices、健康检查等高级配置
❌ 本工具不会导出:
- 数据卷中的实际数据
- 数据库文件
- 容器内部的文件
- Docker 镜像本身
- 容器的运行时状态
数据备份责任
请务必注意:
- 本工具仅导出配置信息,不包含持久化数据备份
- 数据卷中的实际数据需要用户根据导出的配置信息自行备份
- 在迁移或删除容器前,请务必先备份数据
- 详细说明请查看项目中的
DATA_BACKUP_NOTICE.md文档 - 本工具脚本包含安全增强功能,但仍建议用户自行审查代码,避免出现不可预测情况
敏感信息安全
- env 模式会自动将 .env 添加到 .gitignore
- 建议使用 env 模式处理包含敏感信息的容器
- 分享配置时请使用 --privacy 模式隐藏路径
- 定期审查导出的配置文件
🚀 快速开始
安装步骤
# 1. 克隆项目
git clone https://github.com/MG5921MY/docker-tools-public.git
cd DockerTools/export/sh
# 2. 赋予执行权限
chmod +x docker-export-compose.sh
# 3. 查看帮助(中文)
./docker-export-compose.sh --help-cn
# 4. 查看版本信息
./docker-export-compose.sh --version
基础使用
# 导出单个容器(开发环境)
./docker-export-compose.sh my-container
# 导出单个容器(生产环境 - 推荐)
./docker-export-compose.sh --type env --privacy my-container
# 批量导出所有运行中的容器
./docker-export-compose.sh --all-run --type env -o ~/backup
# 从文件批量导出
./docker-export-compose.sh --file containers.txt --type env
# 导出所有容器(包括停止的)
./docker-export-compose.sh --all --type env
# 只导出已停止的容器
./docker-export-compose.sh --all-stop -o ~/stopped-backup
导出模式对比
| 模式 | 命令 | 适用场景 | 安全性 | 输出文件 |
|---|---|---|---|---|
| yml 模式 | ./docker-export-compose.sh my-app | 快速测试 | ⚠️ 明文敏感信息 | docker-compose.yml |
| env 模式 | --type env my-app | 生产环境 | ✅ 敏感信息分离 | yml + .env + .env.example + ... |
| 隐私模式 | --type env --privacy my-app | 分享配置 | ✅ 隐藏路径 | 同 env 模式,但路径被隐藏 |
| 批量导出 | --file containers.txt | 批量管理 | 根据模式而定 | 多个目录,每个容器一个 |
| 全部导出 | --all-run --type env | 完整备份 | ✅ 敏感信息分离 | 所有运行容器的配置 |
📚 完整文档
项目包含详细文档,覆盖使用、安全、配置各方面:
必读文档 ⭐⭐⭐
- 📖 README.md - 项目总览和快速开始
- ⚠️ DISCLAIMER.md - 免责声明(使用前必读)
- 💾 DATA_BACKUP_NOTICE.md - 数据备份重要提醒
- 🔒 export/sh/docs/1_安全使用指南.md - 安全最佳实践
常用文档 ⭐⭐
- ⚡ export/sh/docs/3_快速参考.md - 命令速查表
- ⚙️ export/sh/docs/2_配置文件指南.md - config 文件和自定义关键词配置
- 📖 export/sh/README.md - 脚本详细使用说明
- 📘 export/sh/docs/0_README.md - 文档导航
进阶文档 ⭐
- 📘 export/sh/docs/4_完整使用指南.md - 详细功能说明和高级用法
- 📝 export/sh/docs/5_更新日志.md - 版本历史和更新记录
- 🎓 docs/Docker 基础教学 - Hello World 入门指南.md - Docker 入门教程(第 9.14 章节)
- 📂 DIRECTORY_STRUCTURE.md - 项目目录结构说明
- 📝 CONTRIBUTING.md - 贡献指南
- 🔍 GITHUB_PROJECT_INFO.md - GitHub 项目信息
- 📚 docs/DockerTools 文档编写和维护指南.md - 文档维护规范
💡 使用示例
示例 1:导出 Nginx 容器(推荐方式)
# 使用安全模式导出
./docker-export-compose.sh --type env --privacy nginx-web
# 生成的文件结构
./output/nginx-web/
├── docker-compose.yml # Compose 配置(使用 ${VAR} 引用)
├── .env # 实际敏感数据(不提交到 Git)
├── .env.example # 安全模板(可以分享)
├── .gitignore # Git 配置(自动忽略 .env)
└── README.md # 使用说明
# 启动容器
cd output/nginx-web
docker compose up -d
示例 2:批量备份所有容器
# 备份所有运行中的容器
./docker-export-compose.sh --all-run --type env --privacy -o ~/docker-backup
# 打包备份
cd ~
tar -czf docker-backup-$(date +%Y%m%d).tar.gz docker-backup/
# 如果需要备份数据卷(重要!)
# 根据导出的配置查看数据卷路径,然后手动备份
# 例如:tar -czf data-backup.tar.gz /path/to/data
示例 3:从文件批量导出
# 创建容器列表文件
cat > containers.txt << 'EOF'
# 我的生产环境容器列表
nginx-web
mysql-db
redis-cache
# mongo-dev # 这个是注释,会被跳过
app-backend
EOF
# 批量导出
./docker-export-compose.sh --file containers.txt --type env -o ~/production-backup
# 生成的目录结构
~/production-backup/
├── nginx-web/
│ ├── docker-compose.yml
│ ├── .env
│ └── ...
├── mysql-db/
│ ├── docker-compose.yml
│ ├── .env
│ └── ...
├── redis-cache/
│ └── ...
└── app-backend/
└── ...
示例 4:团队协作分享配置
# 1. 导出配置(使用隐私模式)
./docker-export-compose.sh --type env --privacy my-app
# 2. 进入输出目录
cd output/my-app
# 3. 初始化 Git(.env 会被自动忽略)
git init
git add docker-compose.yml .env.example README.md .gitignore
git commit -m "Add my-app container config"
# 4. 推送到远程仓库
git remote add origin https://github.com/yourname/my-app-config.git
git push -u origin main
# 5. 团队成员使用
# git clone https://github.com/yourname/my-app-config.git
# cd my-app-config
# cp .env.example .env
# nano .env # 填写实际的敏感信息
# docker compose up -d
示例 5:定期自动化备份
# 创建备份脚本
cat > /opt/scripts/docker-backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/docker/$(date +%Y%m%d)"
SCRIPT_DIR="/opt/docker-tools/export/sh"
# 导出所有运行中的容器
cd "$SCRIPT_DIR"
./docker-export-compose.sh --all-run --type env -o "$BACKUP_DIR" --quiet
# 压缩备份
tar -czf "$BACKUP_DIR.tar.gz" "$BACKUP_DIR"
rm -rf "$BACKUP_DIR"
# 清理 30 天前的备份
find /backup/docker -name "*.tar.gz" -mtime +30 -delete
EOF
chmod +x /opt/scripts/docker-backup.sh
# 添加到 crontab(每天凌晨 2 点执行)
# 0 2 * * * /opt/scripts/docker-backup.sh
示例 6:自定义敏感关键词配置
# 编辑配置文件
cd DockerTools/export/sh
nano config
# 添加自定义关键词
# 添加敏感关键词
COMPANY_SECRET
INTERNAL_KEY
CUSTOM_API_TOKEN
# 排除某些包含敏感词但实际不敏感的变量
!PUBLIC_DATABASE_URL
!DEMO_PASSWORD
!TEST_SECRET_KEY
# 导出时会使用自定义配置
./docker-export-compose.sh --type env my-app
示例 7:快速测试和预览
# 使用 dry-run 模式预览将要执行的操作
./docker-export-compose.sh --dry-run --all-run
# 静默模式(最小化输出)
./docker-export-compose.sh --quiet --type env my-app
# 覆盖现有文件(而不是自动递增)
./docker-export-compose.sh --overwrite my-app
🔒 安全特性
v2.2 版本安全增强
| 安全特性 | 说明 | 使用场景 |
|---|---|---|
| 隐私模式 | 隐藏主机路径,防止路径信息泄露 | 分享配置给外部团队 |
| 敏感信息分离 | 自动分离敏感信息到 .env 文件 | 生产环境配置管理 |
| 排除机制 | 标记某些变量为非敏感(! 前缀) | 公开的配置 URL |
| 路径遍历防护 | 验证容器名,防止路径遍历攻击 | 防止恶意容器名 |
| 核心目录保护 | 防止输出到系统目录,需三次确认 | 防止误操作破坏系统 |
| 智能关键词检测 | 50+ 内置敏感关键词(密码、密钥、Token等) | 自动识别敏感环境变量 |
| 自定义关键词 | 支持添加项目特定敏感词 | 企业内部敏感词配置 |
| 警告系统 | yml 模式自动标记敏感信息 | 提醒用户注意安全 |
| 自动 .gitignore | env 模式自动生成 .gitignore 文件 | 防止敏感信息提交到 Git |
| UTF-8 编码保护 | 正确处理中文等多字节字符 | 避免乱码和编码问题 |
| 容器名长度限制 | 限制容器名长度(最大 200 字符) | 防止缓冲区溢出 |
| 安全默认输出目录 | 默认输出到 ./output/(而非当前目录) | 避免污染工作目录 |
敏感信息检测关键词(部分)
密码相关:PASSWORD、PASSWD、PWD、PASS
密钥和令牌:SECRET、TOKEN、KEY、APIKEY、API_KEY、API_SECRET
认证相关:AUTH、AUTHENTICATION、CREDENTIALS、SESSION
证书相关:CERT、CERTIFICATE、SSL、TLS、PRIVATE、PEM
加密相关:SALT、HASH、ENCRYPTION、CIPHER、AES、RSA
数据库相关:DATABASE_URL、DB_PASSWORD、MYSQL_PASSWORD、POSTGRES_PASSWORD
管理员相关:ADMIN、ROOT、ADMIN_PASSWORD、ROOT_PASSWORD
云服务密钥:AWS_SECRET、AWS_ACCESS、AZURE_、GCP_、GOOGLE_
其他:SIGNING_KEY、JWT_SECRET、WEBHOOK_SECRET
安全最佳实践
- 生产环境:始终使用
--type env模式 - 分享配置:使用
--privacy隐藏路径 - 定期审查:检查导出的配置文件
- 备份数据:单独备份数据卷中的数据
- 测试验证:在测试环境验证后再用于生产
- 版本控制:只提交 .env.example,不提交 .env
- 自定义关键词:根据项目添加特定的敏感词
- 权限管理:限制配置文件的访问权限
🎨 项目特点
文档完善
- ✅ 详细文档,覆盖全面(18+ 份文档)
- ✅ 中英双语支持
- ✅ 新手友好的 Docker 入门教程
- ✅ 完整的安全使用指南
- ✅ 详细的故障排查说明
- ✅ 丰富的使用示例
代码质量
- ✅ Shell 脚本清晰易懂
- ✅ 注释详细规范(中英双语)
- ✅ 安全检查完善
- ✅ 错误处理得当
- ✅ 遵循 Shell 最佳实践
- ✅ 模块化函数设计
用户体验
- ✅ 支持中文帮助
--help-cn - ✅ UTF-8 编码,正确处理中文
- ✅ 友好的错误提示
- ✅ 详细的使用文档
- ✅ 彩色输出,信息分级清晰
- ✅ 进度统计和摘要报告
- ✅ 智能配置提示和建议
功能完整
- ✅ 单容器导出
- ✅ 批量导出(all/running/stopped)
- ✅ 从文件批量导出
- ✅ 两种导出模式(yml/env)
- ✅ 隐私保护模式
- ✅ 模拟运行模式
- ✅ 静默模式
- ✅ 覆盖/递增文件命名
- ✅ 自定义输出目录
- ✅ 自动生成配套文件
配置完整性
导出的配置包含容器的所有关键信息:
- ✅ 镜像名称和版本
- ✅ 容器名称
- ✅ 重启策略
- ✅ 网络模式
- ✅ 端口映射
- ✅ 数据卷挂载
- ✅ 环境变量(支持敏感信息分离)
- ✅ 工作目录
- ✅ Capabilities
- ✅ Devices
- ✅ 入口点和命令
- ✅ 资源限制(CPU、内存)
- ✅ 健康检查(注释形式提供建议)
- ✅ 日志配置(注释形式提供建议)
🎓 技术亮点
1. 智能敏感信息处理
- 三级检测机制:排除列表 → 内置关键词 → 自定义关键词
- 优先级设计:排除规则优先级最高,避免误判
- 灵活配置:支持通过 config 文件动态调整
2. 安全防护机制
- 多层防护:容器名验证 → 路径检查 → 三重确认
- 攻击防御:路径遍历、命令注入、缓冲区溢出等
- 安全默认值:安全的默认输出目录和配置
3. 批量处理能力
- 多种批量模式:all、running、stopped、file
- 文件格式灵活:支持注释、空行、自动清理空格
- 统计报告:完整的成功/失败/跳过统计
4. 配置完整性
- 自动识别:自动提取所有容器配置
- 智能建议:为缺失的配置提供注释形式的建议
- 最佳实践:内置 Docker Compose 最佳实践建议
5. 输出结构化
- 清晰目录结构:每个容器独立目录
- 完整配套文件:yml + env + example + gitignore + readme
- 即用配置:导出即可直接使用
📊 版本历史
v2.2(当前版本)- 2025-11-07
新增功能:
- ✨ 隐私模式(--privacy):隐藏数据卷主机路径
- ✨ 排除机制:支持标记某些变量为非敏感(! 前缀)
- ✨ 自定义敏感关键词配置
- ✨ 自动生成 config 配置文件模板
安全增强:
- 🔒 核心系统目录三重确认保护
- 🔒 容器名路径遍历攻击防护
- 🔒 敏感信息检测升级(50+ 关键词)
改进:
- 🎨 UTF-8 编码支持,避免中文乱码
- 🎨 默认输出目录改为 ./output/
- 🎨 env 模式使用 ${VAR} 引用方式
- 🎨 增强的警告系统
未来规划
- 🚀 支持更多配置项导出
- 🚀 Web UI 界面
- 🚀 配置模板库
- 🚀 一键部署功能
⚖️ 免责声明
重要提示
- 功能范围:本工具仅导出容器配置信息,不包含数据备份
- 数据安全:数据备份是用户自己的责任
- 使用风险:使用本工具的所有风险由用户自行承担
- 无保证声明:本工具"按原样"提供,不提供任何明示或暗示的保证
- 责任限制:作者不对使用本工具导致的任何直接或间接损失负责
使用前请确认
- 已阅读并理解免责声明
- 已阅读数据备份重要提醒
- 理解本工具仅导出配置,不包含数据备份
- 将自行负责数据备份和安全
- 将在测试环境充分验证后再用于生产
- 理解配置文件可能包含敏感信息,将妥善保管
完整免责声明请查看项目中的 DISCLAIMER.md 文件
🤝 贡献与反馈
欢迎贡献
- 🐛 报告 Bug
- 💡 提出功能建议
- 📝 改进文档
- 🔧 提交 Pull Request
- 🌍 翻译文档
- ⭐ Star 支持项目
贡献指南
详细的贡献指南请参考 CONTRIBUTING.md 文件。
获取帮助
如果遇到问题:
- 查看文档(特别是安全使用指南和完整使用指南)
- 使用帮助命令:
--help或--help-cn - 查看示例:docs 目录中的使用示例
- 故障排查:查看文档中的故障排查章节
- 提交 Issue:在 GitHub 创建 Issue 并提供详细信息
Issue 提交建议
提交 Issue 时请包含:
- 操作系统版本
- Docker 版本
- 脚本版本
- 完整的错误信息
- 复现步骤
- 预期行为 vs 实际行为
📞 项目信息
- 作者:clearlove.ymg
- 版本:v2.2
- 发布日期:2025-11-07
- 许可证:MIT License
- 项目地址:
https://github.com/MG5921MY/docker-tools-public.git - 文档语言:中文/English
- 支持平台:Linux、macOS、WSL
技术栈
- 核心语言:Bash Shell Script
- 依赖工具:Docker、docker compose
- 文档格式:Markdown
- 版本控制:Git
联系方式
- GitHub Issues:项目问题和建议
- GitHub Discussions:技术讨论和交流
🎉 总结
DockerTools 是一个功能完善、文档详尽、安全可靠的 Docker 容器配置导出工具。适合个人开发者、运维工程师和团队使用。
适合你,如果你需要:
- ✅ 将 docker run 命令转换为 docker-compose
- ✅ 批量导出和备份容器配置
- ✅ 从文本文件批量导出指定容器
- ✅ 安全地分享容器配置给团队
- ✅ 将容器配置纳入版本控制
- ✅ 学习和理解现有容器的配置
- ✅ 定期自动化备份容器配置
- ✅ 服务器迁移时快速导出配置
核心优势:
- 🚀 简单易用:一条命令完成导出
- 🔒 安全可靠:多重安全防护机制
- 📦 功能完整:支持所有主要容器配置
- 📚 文档详尽:18+ 份详细文档
- 🎨 用户友好:中文支持、彩色输出
- 🔧 灵活强大:多种导出模式和选项
请注意:
- ⚠️ 本工具仅导出配置,请单独备份数据
- ⚠️ 使用前请阅读免责声明和安全指南
- ⚠️ 在生产环境使用前请充分测试
- ⚠️ 导出的配置文件可能包含敏感信息,请妥善保管
- ⚠️ 建议使用 --type env 模式处理生产环境配置
快速开始三步走:
- 克隆项目:
git clone https://github.com/MG5921MY/docker-tools-public.git - 赋予权限:
chmod +x docker-export-compose.sh - 开始使用:
./docker-export-compose.sh --type env --privacy my-container
如果这个工具对你有帮助,欢迎 Star ⭐ 支持!
有任何问题或建议,欢迎在 GitHub 提 Issue 讨论!
期待你的反馈和贡献,一起让 DockerTools 变得更好!
📎 相关资源
官方文档
- Docker 官方文档:https://docs.docker.com/
- Docker Compose 文档:https://docs.docker.com/compose/
推荐阅读
- 项目内
Docker 基础教学 - Hello World 入门指南.md - 项目内
安全使用指南.md - 项目内
DATA_BACKUP_NOTICE.md
社区
- GitHub Issues:问题反馈
- GitHub Discussions:技术交流
本文档基于 DockerTools v2.2 版本编写
最后更新:2025-11-07
文档版本:1.0
🎯 核心价值:让 Docker 容器配置管理更简单、更安全、更专业!