程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Docker 环境变量在 RUN 命令中不可用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Docker 环境变量在 RUN 命令中不可用?

开发过程中遇到Docker 环境变量在 RUN 命令中不可用的问题如何解决?下面主要结合日常开发的经验,给出你关于Docker 环境变量在 RUN 命令中不可用的解决方法建议,希望对你解决Docker 环境变量在 RUN 命令中不可用有所启发或帮助;

升级到 Docker 版本 20.10.7 后,我在 Docker 中遇到了 ARG 和 ENV 问题,在 windows 10 上构建 f0df350。

我已经制作了 dockerfile 来显示问题:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base

ARG node_build=production
ENV node_build_env=${node_builD}

FROM node:12.18.3 AS node-build
workdir /root
RUN echo $node_build_env > test.txt

FROM base AS final
workdir /app

copY --from=node-build /root/test.txt ./

我的目标是可以设置一个 ARG,然后将其设置为容器内的环境变量,如果没有设置,则它具有默认值。

在此 Dockerfile 中,我尝试将环境变量 node_build_env 写入文本文件,然后将其复制到最后一层。但问题是文件是空的。

要重新创建这些是我正在使用的命令:

docker build -t testargs:test .

docker run -it --rm testargs:test /bin/bash

cat test.txt

文件是空的。但是,如果我运行:

docker build -t testargs:test . --target node-build

然后手动运行命令:

echo $node_build_env > test.txt

它起作用了,值 production 被写入文件。

为什么当我手动执行它而不是作为 RUN 命令的一部分时它会起作用?

解决方法

您正在使用多阶段构建。

您的 ARG 和 ENV 属于 base 阶段。而且您没有在 base 构建阶段使用 node-build 阶段。

这意味着 node_build_env 中没有 node-build 值。因此,以下行创建一个空的 test.txt 文件。

RUN echo $node_build_env > test.txt

但是您的 final 阶段使用 base 阶段。这意味着它可以访问 node_build_env 变量。因此,在使用 docker build -t testargs:test . 构建映像后,打开与该容器的交互式会话并尝试执行以下命令,

echo $node_build_env

您将看到 production 将在终端中打印出来。

我相信这会帮助您解决问题。干杯? !!!

编辑:

这是工作版本:

ARG node_build=production

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base

FROM node:12.18.3 AS node-build

ARG node_build
ENV node_build_env=$node_build

WORKDIR /root
RUN echo $node_build_env > test.txt

FROM base AS final
WORKDIR /app

COPY --from=node-build /root/test.txt ./

大佬总结

以上是大佬教程为你收集整理的Docker 环境变量在 RUN 命令中不可用全部内容,希望文章能够帮你解决Docker 环境变量在 RUN 命令中不可用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。