gpt4 book ai didi

dockerfile - 使用共享 ARG 的 Docker Hub 多阶段构建上的“无法正常化任何内容”错误

转载 作者:行者123 更新时间:2023-12-05 01:09:10 25 4
gpt4 key购买 nike

我有一个多阶段构建,在阶段之间共享单个 ARG(干燥路径)。像这样的:

ARG BUILD_DIR=/build

FROM alpine:latest as build
RUN apk add --no-cache gcc musl-dev
WORKDIR $BUILD_DIR
RUN echo -e '\n\
#include <stdio.h>\n\
int main (void)\n\
{ puts ("Hello, World!");}'\
>> hello.c
RUN cc -o hello hello.c

FROM alpine:latest
COPY --from=build $BUILD_DIR/hello /app
CMD ["/app"]

它在本地构建没有问题,但自动 Docker Hub 构建失败并出现以下错误:

Step 4/9 : WORKDIR $BUILD_DIRcannot normalize nothing

我很好奇,什么会导致问题(Docker Hub 上的构建引擎太旧?)。还有比在 Dockerfile 中硬编码路径更好的解决方法吗?

最佳答案

turns out我需要在要重用它的每个步骤上更新 ARG 。引用文档:

An ARG instruction goes out of scope at the end of the build stage where it was defined. To use an arg in multiple stages, each stage must include the ARG instruction.

固定的Dockerfile为:

ARG BUILD_DIR=/build

FROM alpine:latest as build
ARG BUILD_DIR # <----------------------------------
RUN apk add --no-cache gcc musl-dev
WORKDIR $BUILD_DIR
RUN echo -e '\n\
#include <stdio.h>\n\
int main (void)\n\
{ puts ("Hello, World!");}'\
>> hello.c
RUN cc -o hello hello.c

FROM alpine:latest
ARG BUILD_DIR # <----------------------------------
COPY --from=build $BUILD_DIR/hello /app
CMD ["/app"]

这意味着我最初问题中代码中的 ARG 值甚至不起作用。有趣的是,我的 Docker For Mac 忽略了这个问题,并默默地使用空的 BUILD_DIR 参数来生成成功构建的 WORKDIR。虽然 Docker Hub 自动化构建器显式失败并出现错误。

关于dockerfile - 使用共享 ARG 的 Docker Hub 多阶段构建上的“无法正常化任何内容”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65520250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com