Docker构建LatentSync镜像时source命令找不到的原因咨询
Docker构建中source命令找不到的原因及解决方法
核心原因
- Docker默认使用
/bin/sh作为RUN指令的执行shell,而source是Bash的内置命令,sh并不支持这个命令。你可以用.(点号)来替代source,这个命令在sh和Bash中都能兼容执行脚本并加载环境变量。
额外问题:独立RUN会话的坑
你的Dockerfile里还有一个隐藏问题:每个RUN指令都是独立的shell会话,RUN cd LatentSync只会在当前RUN进程内切换目录,下一个RUN又会回到WORKDIR /app的路径,所以直接分开写cd和source会导致找不到setup_env.sh文件。
修正后的Dockerfile示例
FROM ubuntu:latest RUN apt-get update && apt-get install -y git WORKDIR /app RUN git clone https://github.com/bytedance/LatentSync.git && \ cd LatentSync && \ . setup_env.sh
关键修改说明
- 将
source替换为.,兼容sh环境 - 把
git clone、cd、source合并到同一个RUN指令中,确保目录切换和脚本执行在同一个会话内完成 - 也可以用
WORKDIR提前切换目录,再执行脚本:
FROM ubuntu:latest RUN apt-get update && apt-get install -y git WORKDIR /app RUN git clone https://github.com/bytedance/LatentSync.git WORKDIR /app/LatentSync RUN . setup_env.sh
内容的提问来源于stack exchange,提问作者easythrees
相关产品推荐
相关产品推荐

