docker - 在带有 build-arg 标志的 Docker 构建中,值未正确传递

标签 docker docker-compose dockerfile docker-build

我在 shell 脚本中使用以下命令来传递 docker args

docker build -t "${IMAGE_INPUT}-temp" --build-arg BASE_IMAGE=$IMAGE_INPUT --build-arg TEMP_DIR=$TEMP -f $DOCKER_FILE .

我的 docker 文件有以下内容

ARG BASE_IMAGE
ARG TEMP_DIR
FROM $BASE_IMAGE

RUN echo $TEMP_DIR && \
    echo $BASE_IMAGE

但是尽管在 docker build 命令中传递了值,但两个变量在这里都打印为 null。分配默认值后它可以工作,但如果没有默认值,变量值将为空。

有人可以帮助我如何传递多个参数并在我的 dockerfile 中使用这些参数

最佳答案

Dockerfile 中的每条 FROM 指令都指示 docker 启动一个新阶段,默认情况下没有上下文从一个阶段传播到下一个阶段。您可以将每个阶段视为一个独立的镜像构建。有关多阶段 docker 镜像构建以及引入它们的原因的更多信息,请参见文档 here .

在您的情况下,这意味着您要在 docker 构建的第一阶段(在本例中为第 0 阶段)声明构建参数 BASE_IMAGE 和 TEMP_DIR。但是,您的 echo 命令处于 docker 构建的第二阶段,因此对这些构建参数一无所知(它们的范围限定为阶段 0)。

要解决此问题,您只需在需要的每个阶段声明构建参数即可。这应该可以正常工作:

# start of stage 0
ARG BASE_IMAGE

FROM $BASE_IMAGE

# start of stage 1
ARG BASE_IMAGE
ARG TEMP_DIR

RUN echo $TEMP_DIR && \
    echo $BASE_IMAGE

关于docker - 在带有 build-arg 标志的 Docker 构建中,值未正确传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63120325/

相关文章:

docker - 如何使用 docker compose 在我的容器中使用创建的卷?

docker - 使用 nginx 作为反向代理的 Kibana 只会导致 404 错误

docker - Dockerfile中的mkdir .ssh,文件夹不存在吗?

docker - 如何知道使用了哪个命令或组合文件来启动 Docker 容器?

java - Docker Compose找不到Docker

docker - 无法使用HTTP请求从单独的容器访问Jenkins容器

python-3.x - 无法使用 Python 3.8 在 Ubuntu 18.04 上创建 virtualenv

docker - 如何使用 Docker 支持对 ASP.Net Core 进行基本更改?

docker - 不能与dockerized Gitlab一起使用ssh

Docker 卷必须是映射,而不是字符串