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

Docker cp命令向容器复制文件不生效,报错提及无关other_image.png

问题产生原因
  • 核心原因是你指定的容器内目标路径/usr/share/app/public/img不是目录,而是一个已存在的文件,这个文件就是报错中出现的other_image.png,大概率是你此前给容器做了绑定挂载:将宿主机的/home/other_user/docker_services/app/other_image.png单文件直接挂载到了容器内的/usr/share/app/public/img路径上,导致该路径的类型从目录变成了单文件。
  • docker cp的逻辑是:如果目标路径是已存在的目录,会把源文件放到该目录下;如果目标路径是已存在的文件,会尝试用源文件覆盖该文件。你预期/usr/share/app/public/img是目录要放文件,但它实际是文件,所以触发底层挂载报错,报错信息会带出该路径实际对应的底层挂载文件也就是other_image.png的信息,和你本次要拷贝的image.png无关。
解决步骤
  1. 先核实挂载配置确认问题
    执行以下命令查看容器的挂载信息,确认是否存在对应单文件挂载:
docker inspect my_container | grep Mounts -A 30

如果输出中存在将other_image.png挂载到/usr/share/app/public/img的规则,即可确认问题根因。

  1. 对应解决方案分两种场景:
  • 场景1:需要保留容器内/usr/share/app/public/img作为目录使用
    修改容器的启动配置,将原来的单文件挂载改为目录挂载:把宿主机的/home/other_user/docker_services/app/目录(而不是里面的单个png文件)挂载到容器的/usr/share/app/public/img路径,重启容器后再执行原docker cp命令即可。
    如果不需要保留现有挂载,也可以直接操作容器调整路径后再拷贝:
# 如果路径已存在为文件先删除
docker exec -it my_container rm -f /usr/share/app/public/img
# 递归创建目标目录
docker exec -it my_container mkdir -p /usr/share/app/public/img
# 再执行拷贝命令
sudo docker cp /home/myusername/image.png my_container:/usr/share/app/public/img
  • 场景2:不需要修改现有挂载规则
    直接把要拷贝的image.png放到宿主机的/home/other_user/docker_services/app/目录下即可,因为绑定挂载是双向同步的,宿主机该目录下新增的文件会自动同步到容器对应的挂载路径中,不需要额外执行docker cp。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:24:02