You need to enable JavaScript to run this app. Docker多阶段构建运行Go服务提示config.properties不存在的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Docker多阶段构建运行Go服务提示config.properties不存在的问题咨询

问题根因

当前多阶段Docker构建的文件传递存在遗漏:

  • 第一阶段(golang编译环境)虽然把config.properties拷到了临时构建目录/app下,但这个目录只是编译用的临时环境,最终生成的运行镜像不会自动包含这里的全部文件,只有手动从这个阶段往外COPY的文件才会进到最终镜像内
  • 最终镜像设置的工作目录是/dbt,Go程序启动时会在当前工作目录(也就是/dbt)下寻找config.properties,但你之前只把编译好的server二进制拷到了这个目录,没有放置配置文件,自然会报文件不存在的错误
修复方案

只需要在最终运行镜像的构建步骤中,把config.properties补拷到/dbt目录即可,两种写法任选其一:

  1. 从builder阶段转拷(和现有传递server二进制的逻辑保持一致)
    在Dockerfile的最终构建段新增一行拷贝指令,修改后的核心片段如下:
    FROM fishtownanalytics/dbt:0.19.0
    USER root
    WORKDIR /dbt
    # 原有拷贝server的逻辑保留
    COPY --from=builder /app/server ./
    # 新增:将构建阶段的config.properties同步到当前工作目录
    COPY --from=builder /app/config.properties ./
    COPY script.sh ./
    COPY jaffle-shop ./
    
    ENTRYPOINT ["./server"]
    
  2. 直接从本地构建上下文拷贝(流程更直接,因为本地的config.properties本来就和Dockerfile处于同一目录)
    把上面的新增拷贝指令替换为:
    COPY ./config.properties ./
    
注意事项
  • 配置文件本身是key=value格式,不需要做特殊适配,只要文件存放路径和Go程序读取的相对路径匹配(当前程序读取的就是工作目录下的config.properties),程序就能正常解析
  • 你之前写的构建命令漏了末尾的构建上下文标识,修正后正确的构建命令为:docker build -t sample:v1 .
  • 你现有的运行命令不需要做调整:PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} sample:v1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 15:15:02