docker exec -it
是与 Docker 容器交互最常用的命令之一。本文将精炼介绍其核心用法和关键技巧。
docker exec -it
是什么?
这个命令组合用于在正在运行的 Docker 容器中以交互方式执行命令。
exec
: 在容器内执行命令。-i
(--interactive
): 保持标准输入(STDIN)开启,允许你向命令发送输入。-t
(--tty
): 分配一个伪终端,为你提供一个交互式的命令行界面。
简单来说,docker exec -it
就像是 SSH 进入一台正在运行的容器。
两种主要用法
1. 进入交互式 Shell(用于调试)
这是最常见的用法,可以让你进入容器的命令行环境,自由探索和执行多个命令。
# 进入容器的 shell 环境
docker exec -it <容器名称或ID> /bin/sh
为什么用 /bin/sh
?
sh
(Bourne Shell) 是一个基础的 Shell,几乎存在于所有 Linux 镜像中,包括轻量级的 Alpine。bash
(Bourne Again Shell)功能更强大,但在很多镜像(尤其是 Alpine)中默认不安装。- 经验法则: 先用
sh
,如果需要bash
的高级功能(如命令补全),再尝试bash
。如果bash
不可用,你会看到executable file not found
的错误。
2. 执行单个命令(用于脚本)
这种方式在执行完指定命令后会立即退出,非常适合自动化脚本。
# 检查应用日志
docker exec -it my-app tail -f /var/log/app.log
# 操作数据库
docker exec -it my-postgres psql -U user -d db_name
# 查看文件列表
docker exec -it my-container ls -l /app
关键注意事项
- 容器必须在运行中:
exec
只能作用于running
状态的容器。 - 修改是临时的:在容器内的所有文件修改,在容器重启后都会丢失,除非你修改的是挂载卷(Volume)中的数据。
- 权限问题:命令以容器内指定的默认用户身份运行,可能会有权限限制。
总结
- 需要调试或探索容器内部?使用
docker exec -it <container> /bin/sh
。 - 需要自动化或执行一次性任务?使用
docker exec -it <container> <command>
。 - 不确定用
sh
还是bash
?优先用sh
,因为它的兼容性最好。
掌握 docker exec -it
,可以让你管理 Docker 容器更加得心应手。