Kir*_*ill 5 dockerhub dockerfile
我有一个多阶段构建,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"]
Run Code Online (Sandbox Code Playgroud)
它在本地构建没有问题,但自动 Docker Hub 构建失败并出现以下错误:
步骤 4/9:WORKDIR $BUILD_DIR 无法标准化任何内容
我很好奇,什么会导致这个问题(Docker Hub 上的构建引擎太旧?)。除了在 Dockerfile 中硬编码路径之外,还有更好的解决方法吗?
Kir*_*ill 11
事实证明,我需要ARG在想要重用它的每个步骤上进行更新。引用文档:
指令
ARG在定义它的构建阶段结束时超出范围。要在多个阶段中使用 arg,每个阶段都必须包含该ARG指令。
固定的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"]
Run Code Online (Sandbox Code Playgroud)
这意味着ARG我最初的问题中的代码中的值甚至不起作用。有趣的是,我的 Docker For Mac 忽略了这个问题,并默默地使用空BUILD_DIR参数来WORKDIR生成成功的构建。虽然 Docker Hub 自动构建器失败并明确显示错误。
| 归档时间: |
|
| 查看次数: |
6766 次 |
| 最近记录: |