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

Docker使用ADD指令处理symlinks软链接时提示文件不存在问题咨询

问题原因
  • Docker构建上下文的访问限制:执行docker build -t test -f 7.1/Dockerfile .时,末尾的.指定了构建上下文为当前工作目录,Docker只会将该目录下的真实文件、目录打包传输给Docker daemon,绝对不会访问上下文之外的任何文件路径。你本地的etc/php是软链接,指向的/home/neubert/devops/containers/common/etc/php完全不在当前构建上下文范围内,Docker无法读取该路径的内容。
  • ADD指令的默认行为限制:Docker的ADD/COPY指令默认不会跟随软链接解析其指向的目标内容,仅会尝试复制软链接本身,当检测到软链接指向外部路径时,就会直接触发文件不存在的报错。
  • 补充排查点:可以先检查当前目录下的.dockerignore文件,确认没有规则排除etc/或者etc/php路径,如果有匹配规则删除对应规则即可。
解决方法

你可以根据自己的使用场景选择以下任意一种方案:

  1. 替换软链接为真实目录
    直接将/home/neubert/devops/containers/common/etc/php的完整内容复制到当前构建上下文下的etc/php路径,替换原有软链接后重新执行构建即可。
  2. 调整构建上下文范围
    如果需要复用公共目录的内容,可以将构建上下文调整为包含公共目录的上层路径,同时修改Dockerfile内的路径匹配规则。比如进入/home/neubert/devops/目录执行构建,命令调整为:
sudo docker build -t test -f ./containers/[你的当前项目所在路径]/7.1/Dockerfile .

同时将Dockerfile中的ADD语句修改为:

ADD containers/common/etc/php /usr/local/etc/php
  1. 临时复制软链接内容到上下文
    如果不想修改原有目录结构,可以在构建前执行命令将软链接指向的内容同步到当前上下文:
cp -Lr etc/php etc/php_temp && mv etc/php_temp etc/php

构建完成后再按需恢复原有的软链接即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:51:00