【问题标题】:Docker multi-stage build: COPY --from=builder failed: no such file or directoryDocker 多阶段构建:COPY --from=builder 失败:没有这样的文件或目录
【发布时间】:2019-11-29 20:47:34
【问题描述】:

以下 Dockerfile

FROM nvidia/cuda:10.2-devel-ubuntu18.04 AS builder

...

RUN ls $HOME/bin

FROM nvidia/cuda:10.2-runtime-ubuntu18.04

COPY --from=builder $HOME/bin/ffmpeg /usr/local/bin/ffmpeg

返回

Step 21/23 : RUN ls $HOME/bin
 ---> Running in a8dee059d9a6
ffmpeg

Removing intermediate container a8dee059d9a6
 ---> 1cb71814a43b

Step 22/23 : FROM nvidia/cuda:10.2-runtime-ubuntu18.04
 ---> e442a6c5cd9a

Step 23/23 : COPY --from=builder $HOME/bin/ffmpeg /usr/local/bin/ffmpeg
COPY failed: stat /var/lib/docker/overlay2/b9283a57527d878d76ea8f8a1e87eb1a6466e849ee1cb4bc69601e184f6dea1f/merged/bin/ffmpeg: no such file or directory

我错过了什么吗?是不是 docker 的 bug?

【问题讨论】:

    标签: linux bash docker dockerfile


    【解决方案1】:

    您不能在COPY 操作中使用$HOME(或任何环境变量)。你有这个问题的详细信息https://github.com/moby/moby/issues/34482

    简单测试:

    这行得通:

    FROM ubuntu AS builder
    
    RUN echo "fooo" > ${HOME}/test.txt
    
    FROM ubuntu
    COPY --from=builder /root/test.txt /tmp/test.txt
    RUN cat /tmp/test.txt
    

    这不起作用,和你一样的错误:

    FROM ubuntu AS builder
    
    RUN echo "fooo" > ${HOME}/test.txt
    
    FROM ubuntu
    COPY --from=builder ${HOME}/test.txt /tmp/test.txt
    RUN cat /tmp/test.txt
    

    【讨论】:

    • $HOME 变量很可能是由 shell 定义的,您在 RUN 命令中拥有该变量,但在 docker 自身扩展的 COPY 命令中没有。需要使用ENV 步骤设置它,COPY 命令才能工作。
    • @yzT @BMitch 它使用/root 而不是$HOME 就像一个魅力。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-12-19
    • 2022-11-17
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多