Laravel Sail Dockerfile无法复制项目根目录脚本问题求助
Laravel Sail自定义Dockerfile无法复制项目根目录的odbc17.sh脚本
问题核心原因
Docker构建时的上下文路径是关键:通过Laravel Sail构建镜像时,默认构建上下文是Laravel项目根目录,而非自定义Dockerfile所在的docker/8.3/子目录。你之前使用的多级相对路径../../../../../odbc17.sh完全错误,因为COPY指令的源路径始终基于构建上下文(项目根目录)。
解决方案
- 修正COPY指令路径
直接使用项目根目录下的脚本文件名作为源路径,无需多级跳转:
# 替换原有错误的COPY指令 COPY odbc17.sh .
- 确保脚本拥有执行权限
为避免执行脚本时出现权限错误,可在COPY后添加权限设置:
COPY odbc17.sh . RUN chmod +x odbc17.sh RUN /bin/bash odbc17.sh
- 验证文件复制结果(可选)
若仍有疑问,可在COPY后添加命令查看当前目录内容,确认脚本是否成功复制:
COPY odbc17.sh . RUN ls -la /var/www/html # 查看目录内容,确认odbc17.sh存在 RUN chmod +x odbc17.sh RUN /bin/bash odbc17.sh
修改后的关键片段示例
# ... 原有Dockerfile内容 ... RUN pwd > /tmp/context.txt \ && cat /tmp/context.txt # 修正后的COPY与执行逻辑 COPY odbc17.sh . RUN chmod +x odbc17.sh RUN /bin/bash odbc17.sh # ... 原有Dockerfile内容 ...
补充说明
- 执行
sail build时,Docker会将项目根目录下的所有文件作为构建上下文,因此所有COPY/ADD指令的源路径都要基于这个根目录。 - 无需关心Dockerfile所在的子目录位置,只要脚本在项目根目录,直接写文件名即可完成复制。
内容的提问来源于stack exchange,提问作者HAssanLFG
相关产品推荐
相关产品推荐

