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

Laravel Sail Dockerfile无法复制项目根目录脚本问题求助

Laravel Sail自定义Dockerfile无法复制项目根目录的odbc17.sh脚本

问题核心原因

Docker构建时的上下文路径是关键:通过Laravel Sail构建镜像时,默认构建上下文是Laravel项目根目录,而非自定义Dockerfile所在的docker/8.3/子目录。你之前使用的多级相对路径../../../../../odbc17.sh完全错误,因为COPY指令的源路径始终基于构建上下文(项目根目录)。

解决方案

  1. 修正COPY指令路径
    直接使用项目根目录下的脚本文件名作为源路径,无需多级跳转:
# 替换原有错误的COPY指令
COPY odbc17.sh .
  1. 确保脚本拥有执行权限
    为避免执行脚本时出现权限错误,可在COPY后添加权限设置:
COPY odbc17.sh .
RUN chmod +x odbc17.sh
RUN /bin/bash odbc17.sh
  1. 验证文件复制结果(可选)
    若仍有疑问,可在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:32:06