docker exec 命令详解
核心概念
让宿主机在一个正在运行的容器内部执行指定命令。命令格式如下:
docker exec [选项] 容器名或容器ID 命令 [参数]
基本规则
容器必须处于运行状态(通过 docker ps 检查)
命令在容器内执行,但命令本身在宿主机输入。路径指向容器内部路径而非宿主机路径
每次 docker exec 默认仅执行单条命令,复杂逻辑需封装
常见选项组合
-i 保持标准输入开启(用于管道场景)
bash
docker exec -i 容器名 tar -xf - < 输入流
-it 分配伪终端(交互式操作)
bash
docker exec -it 容器名 bash
-u 指定执行用户
docker exec -u root 容器名 命令
典型使用场景
执行简单命令
bash
docker exec 容器名 ls /path
进入容器交互终端
bash
docker exec -it 容器名 bash/sh
执行复合命令
bash
docker exec 容器名 bash -lc 'cd /path && ls'
跨容器管道操作
bash
docker exec 容器A tar -cf - . | docker exec -i 容器B tar -xf -
常见问题处理
管道作用域混淆时,显式指定执行环境
bash
docker exec 容器名 bash -lc '命令 | 过滤'
目录切换需通过shell封装
bash
docker exec 容器名 bash -lc 'cd /path && 命令'
权限不足时切换用户
bash
docker exec -u root 容器名 命令
精简镜像使用sh替代bash
bash
docker exec -it 容器名 sh
注意事项
重定向符号在宿主机环境解析
环境变量继承受容器配置影响
命令路径需考虑容器内文件系统布局