You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行docker exec操作容器时出现Permission denied报错如何解决

报错根因

权限拒绝问题的核心是命令解析逻辑出了问题,和容器内用户权限无关:

  • 原命令中docker exec的生效范围仅到printf语句段,末尾的>> /proc/1/fd/1是由宿主机的bash解析执行的,本质是尝试在宿主机上往宿主机1号进程的标准输出写内容,普通用户无操作权限自然报错
  • 之前添加--user appuser参数仅能修改容器内执行命令的用户身份,完全不影响宿主机侧的重定向逻辑,因此调整后依然无法生效
实现方案

方案1:零额外配置的最简实现

docker exec执行命令产生的所有标准输出,默认就会被Docker采集接入对应容器的日志流,完全不需要手动操作容器内的/proc文件描述符,直接执行以下命令即可:

docker exec --workdir /app my-container printf 'NEW VERSION UPLOADED %s\n' "$(printenv VERSION)"

执行后打印的版本通知会直接出现在docker logs my-container的输出结果中,满足日志通知需求。

方案2:需直接写入容器内/proc路径的场景

如果有特殊要求必须往容器内/proc/1/fd/1写入内容,需要将完整执行逻辑(包含重定向动作)传入容器内的shell执行,避免宿主机提前解析重定向:

docker exec --workdir /app --user root my-container sh -c 'printf "NEW VERSION UPLOADED %s\n" "$VERSION" >> /proc/1/fd/1'

执行注意事项:

  • 必须用sh -c包裹完整执行语句,确保重定向逻辑在容器内部解析
  • 容器内/proc/1/fd/1默认仅root用户有写入权限,因此需要指定--user root执行,使用普通业务用户(比如之前的appuser)依然会触发权限报错
  • 如果需要读取容器内的VERSION环境变量,注意使用单引号包裹sh -c后的执行语句,避免变量在宿主机侧提前展开。

内容的提问来源于stack exchange,提问作者Seura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:24:20