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

Docker多阶段构建无法将第一阶段编译的二进制复制到第二阶段

问题根因

你的怀疑完全正确,问题就出在docker-compose的volumes挂载配置上:
你在Dockerfile的RUN阶段将编译生成的.tsk文件复制到了镜像内的/workarea路径下,但docker-compose中配置了- .:/workarea绑定挂载,容器启动时会直接用宿主机当前目录覆盖容器内的/workarea整个目录。只要你宿主机本地目录下没有对应编译产物,容器内就看不到镜像里COPY进去的文件。

解决方案

你可以根据自己的使用场景选对应方案:

  • 如果不需要将本地目录同步到容器内,直接删除docker-compose.yaml中的volumes配置项即可,容器会直接使用镜像内置的/workarea目录下的所有文件。
  • 如果确实需要挂载本地目录做开发调试,可以选以下两种方案之一:
    1. 修改编译产物的COPY目标路径,不要放在/workarea下,比如改为/opt/build_output这类不会被挂载的路径,使用时直接从新路径调取文件即可。
    2. 给挂载配置增加匿名卷排除编译产物目录,修改volumes配置为:
    volumes:
      - .:/workarea
      - /workarea/cmake-build
    
    这样/workarea/cmake-build目录不会被宿主机目录覆盖,镜像中内置的编译产物会被保留。

验证方法

你可以先临时注释掉docker-compose中的volumes配置,再启动容器执行ls命令,确认文件正常存在即可验证是挂载覆盖导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:54:03