`docker run -it --rm` 笔记250624
docker run -it --rm
笔记250624
docker run -it --rm
是一个强大且常用的 Docker 命令组合,特别适合交互式开发和调试场景。以下是详细解析和使用指南:
参数解析
参数 | 作用 | 典型场景 |
---|---|---|
-i | 保持 STDIN 打开(交互模式) | 需要输入命令的交互操作 |
-t | 分配伪终端(TTY) | 需要终端交互(如 Bash) |
--rm | 容器退出后自动删除文件系统 | 临时任务,避免残留容器 |
核心价值
- 即时清理
容器退出后自动删除,避免产生大量停止状态的容器(docker ps -a
显示的无用容器) - 安全实验
可在容器内自由测试危险操作(如rm -rf /*
),不影响宿主机 - 环境一致性
每次启动都是全新的干净环境(适合 CI/CD 测试)
典型使用场景
1. 临时调试工具链
# 使用最新 Ubuntu 调试网络问题(退出即删)
docker run -it --rm ubuntu bash -c "apt update && apt install -y curl && curl example.com"
2. 语言环境快速测试
# 测试 Python 代码(不污染本地环境)
docker run -it --rm python:3.9 python
>>> print("Hello, Docker!")
3. 文件操作沙箱
# 安全解压未知压缩包
docker run -it --rm -v $(pwd):/data alpine sh
/data # unzip suspicious.zip
4. 数据库临时查询
# 单次 SQL 查询(避免残留容器)
docker run -it --rm mysql:8.0 mysql -hdb_host -uroot -p"$PWD" -e "SHOW DATABASES"
进阶使用技巧
1. 组合挂载目录
# 挂载当前目录并安装依赖(退出后容器消失,依赖不残留)
docker run -it --rm -v $(pwd):/app -w /app node:14 npm install
2. 多命令执行
# 在 Alpine 中执行多个命令
docker run -it --rm alpine sh -c "date && echo '测试完成'"
3. 快速清理所有临时容器
# 删除所有已停止的容器(常与 --rm 配合使用)
docker container prune -f
注意事项
-
数据持久化
--rm
不会删除卷(Volumes)或绑定挂载(Bind Mounts)的数据:# 安全修改文件(修改会保留在宿主机) docker run -it --rm -v $(pwd):/data ubuntu nano /data/file.txt
-
禁止场景
- 需要长期运行的服务(如 Web 服务器)
- 需要保留运行历史或日志的场景
-
资源限制
可配合资源限制使用:docker run -it --rm --memory=500m --cpus=0.5 python
与常规启动的对比
特性 | docker run -it --rm | 普通 docker run -d |
---|---|---|
容器生命周期 | 退出即销毁 | 需手动停止/删除 |
磁盘空间 | 自动清理 | 累积停止容器占用空间 |
环境状态 | 每次启动都是全新环境 | 保留之前状态 |
适用场景 | 调试/测试/临时任务 | 长期运行服务 |
经典工作流示例
# 1. 调试构建失败问题
docker run -it --rm -v $(pwd):/src buildpack-deps make test# 2. 检查容器内进程
docker run -it --rm busybox top# 3. 临时 HTTP 测试服务
docker run -it --rm -p 8080:80 nginx
掌握 -it --rm
组合能极大提升 Docker 使用效率,特别适合开发、测试和排查问题场景!