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

Docker多阶段构建如何避免前阶段目录被覆盖?

解决Docker多阶段构建中前阶段文件丢失的问题

这个问题是多阶段构建的典型误区——第二阶段的镜像完全基于node:12的干净环境,第一阶段安装的所有内容默认不会自动继承,所以你运行容器时自然找不到usd_from_gltf命令。

要解决这个问题,我们需要在第二阶段主动复制第一阶段的关键文件和依赖,同时同步必要的环境变量。下面是修改后的完整Dockerfile,我会标注核心改动:

# 第一阶段:构建并安装usd_from_gltf,给这个阶段起别名方便后续引用
FROM leon/usd:latest AS ufg-builder
WORKDIR /usr/src/ufg
# Configuration
ARG UFG_RELEASE="3bf441e0eb5b6cfbe487bbf1e2b42b7447c43d02"
ARG UFG_SRC="/usr/src/ufg"
ARG UFG_INSTALL="/usr/local/ufg"
ENV USD_DIR="/usr/local/usd"
ENV LD_LIBRARY_PATH="${USD_DIR}/lib:${UFG_SRC}/lib"
ENV PATH="${PATH}:${UFG_INSTALL}/bin"
ENV PYTHONPATH="${PYTHONPATH}:${UFG_INSTALL}/python"
# Build + install usd_from_gltf
RUN git init && \
    git remote add origin https://github.com/google/usd_from_gltf.git && \
    git fetch --depth 1 origin "${UFG_RELEASE}" && \
    git checkout FETCH_HEAD && \
    python "${UFG_SRC}/tools/ufginstall/ufginstall.py" -v "${UFG_INSTALL}" "${USD_DIR}" && \
    cp -r "${UFG_SRC}/tools/ufgbatch" "${UFG_INSTALL}/python" && \
    rm -rf "${UFG_SRC}" "${UFG_INSTALL}/build" "${UFG_INSTALL}/src"

# 第二阶段:运行Node.js服务器,同时引入第一阶段的usd_from_gltf
FROM node:12
WORKDIR /usr/src/app

# 复制第一阶段安装好的usd_from_gltf和依赖的USD库
COPY --from=ufg-builder /usr/local/ufg /usr/local/ufg
COPY --from=ufg-builder /usr/local/usd /usr/local/usd

# 同步第一阶段的环境变量,确保命令和依赖库能被找到
ENV USD_DIR="/usr/local/usd"
ENV LD_LIBRARY_PATH="${USD_DIR}/lib:/usr/local/ufg/lib"
ENV PATH="${PATH}:/usr/local/ufg/bin"
ENV PYTHONPATH="${PYTHONPATH}:/usr/local/ufg/python"

# 继续原有的Node.js服务构建步骤
COPY package.json ./
RUN yarn install
COPY . .
CMD ["yarn", "start"]

关键改动说明:

  • 给第一阶段起别名:用AS ufg-builder标记第一阶段,这样第二阶段可以通过--from=ufg-builder精准引用它的文件。
  • 复制核心文件:通过COPY --from=ufg-builder把第一阶段安装的/usr/local/ufg(usd_from_gltf的安装目录)和/usr/local/usd(依赖的USD库)复制到第二阶段镜像中。
  • 同步环境变量:在第二阶段重新设置PATH、LD_LIBRARY_PATH等环境变量,确保系统能找到usd_from_gltf命令和它依赖的动态库。

验证方法:

你可以先启动容器并进入交互式模式,测试命令是否可用:

docker run -it --rm <your-image-name> bash

然后在容器内执行usd_from_gltf --version,如果能正常输出版本信息,说明配置成功,再启动Node服务即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:37:44