首页/云/Docker 容器速查/docker exec 常用选项 -u/-w/-e/-d
基础命令50 条

docker exec 常用选项 -u/-w/-e/-d

exec 的四个常用开关:-u 指定用户、-w 指定工作目录、-e 临时注入变量、-d 后台执行;都可组合使用。

Docker 容器速查云更新于 2026-10-13

exec 的四个常用选项

docker exec 在运行中的容器里另起一个进程:-u 指定用户、-w 指定工作目录、-e 临时注入环境变量、-d 放到后台执行。这些参数只作用于本次命令,不会改动容器本身的配置,所以适合排查与临时操作。

基本信息

语法docker exec [-u USER] [-w DIR] [-e K=V] [-d] CONTAINER CMD
作用范围仅本次进程,容器配置不变
常用组合-it 进交互式 shell;-T 在无终端环境禁用 TTY
前提容器必须处于运行状态
注意-w 目录必须已存在,-e 不会持久化

典型使用场景

  • 进容器排查:docker exec -it 容器 sh,先确认镜像里有没有 bash
  • 以应用相同身份执行命令(-u www-data),验证失败是否由权限或身份引起
  • 临时带一个变量跑脚本(-e API_URL=...),不必为此重建容器
  • 在指定目录下执行命令(-w /var/www/html),省掉手动切换目录
  • 后台触发一次长任务(-d),随后从日志或文件看结果
  • CI 脚本里加 -T,避免因没有终端而报 the input device is not a TTY

示例

示例
docker exec -it web sh                                 # 交互式进入容器
docker exec -u www-data -w /var/www/html web php -v     # 指定用户与工作目录
docker exec -e API_URL=http://api:8080 web env | grep API_URL
docker exec -T db psql -U postgres -c 'select 1;'       # 无终端环境下必须加 -T
docker exec -d web sh -c 'touch /tmp/deploy.flag'       # 后台执行,输出被丢弃

参数对照

参数作用常见问题
-u USER以指定用户执行账号不存在会报错,镜像里没有该用户时改用 UID
-w DIR指定工作目录目录不存在直接失败,不会自动创建
-e K=V注入本次环境变量不持久化,容器重建后消失
-d后台执行输出被丢弃,要看结果得让命令重定向到文件
-i 与 -t保持输入、分配终端脚本里带 -t 会因无终端报错,改用 -T
-d 后台执行时命令输出默认丢弃,想看结果要么不加 -d,要么让命令自己重定向到文件,之后用 docker exec 或 docker cp 取出来。
exec 起的是容器内的新进程,与主进程的环境和 PID 1 职责都不同,信号处理与子进程回收不归它管,长期服务不要靠 exec 拉起。

易错点

  • 用 exec 拉起的进程不受容器重启策略保护,容器重建后它就不存在了,长期任务应当作为服务定义
  • CI 里忘记 -T 会因无终端报错,现象看着像容器故障,实际只是缺少终端
  • 多用户共享宿主时 exec -u root 能绕过应用权限模型,动手前先想清楚影响范围
  • 容器没运行时 exec 会直接报错,先看退出码与日志把容器拉起来,反复 exec 没有意义

数据来源与参考

  • Docker 官方 CLI 参考:docker exec 选项(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌