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

Docker Run挂载主机共享目录写入文件报Permission denied的原因咨询

问题原因及解决方法

这问题其实是shell重定向的执行上下文搞混了,我给你掰扯清楚:

为什么直接用docker run会报错?

你执行的这条命令:

sudo docker run -it -v ~/shared:/media/ i386/centos:6 echo aaa >> /media/addd.txt

这里的>> /media/addd.txt不是交给容器内部处理的,而是你的宿主机Shell先解析了这个重定向——也就是说,容器里执行echo aaa输出的内容,要写到宿主机的/media/addd.txt里,而宿主机的这个目录通常只有root才有写权限,哪怕你加了sudo,重定向的操作其实没被sudo覆盖,还是普通用户权限在处理,所以就报Permission denied了。

为什么进入容器内部执行就没问题?

当你进入容器内部后,执行echo aaa >> /media/addd.txt时,整个命令都是在容器的Shell环境里运行的:

  • 容器里的/media已经挂载了你宿主机的~/shared目录
  • 容器默认是以root用户执行命令的,root对挂载目录有写权限
  • 重定向操作是容器内部的Shell处理,直接写到挂载目录对应的宿主机~/shared/addd.txt,自然没问题。

怎么解决?

要让重定向操作在容器内部完成,你需要把整个命令打包交给容器的Shell来执行,比如用bash -c包裹:

sudo docker run -it -v ~/shared:/media/ i386/centos:6 bash -c "echo aaa >> /media/addd.txt"

这样一来,echo aaa >> /media/addd.txt整个都会在容器内部的bash里执行,重定向也针对容器内的/media(也就是你宿主机的~/shared),权限就没问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:50:51