gpt4 book ai didi

Docker 通过命令或文件设置环境变量

转载 作者:行者123 更新时间:2023-12-02 01:28:26 25 4
gpt4 key购买 nike

我需要设置一个环境变量CLASSPATH。在该变量中,我需要设置命令的结果:

hadoop classpath --glob

这将返回大量的 java 库,并且它们都需要设置到 CLASSPATH 变量中。最大的问题是我只能在 docker 构建完成后运行这个命令,这意味着我必须在 ENTRYPOINT 中执行它。但我就是无法让它发挥作用。我尝试了不同的方法:

ENTRYPOINT ["sh", "-c", "export CLASSPATH=$(hadoop classpath --glob) ...."
ENTRYPOINT ["sh", "-c", "set CLASSPATH=$(hadoop classpath --glob) ...."
ENTRYPOINT ["sh", "-c", "CLASSPATH=$(hadoop classpath --glob) ...."
ENTRYPOINT ["sh", "-c", "/bin/bash && export CLASSPATH=$(hadoop classpath --glob) ...."

但是没有任何效果。该命令本身可以正常工作,我使用以下方法对其进行了测试:

ENTRYPOINT ["sh", "-c", "echo $(hadoop classpath --glob) >> /tmp/classpath.tmp ...."

启动后该文件包含正确的内容。所以只是设置和保存环境变量有问题。我应该如何设置环境变量?通常你会使用类似的东西

ENV CLASSPATH="some classpath"

但是在这里我无法使用ENV语句,因为它不会处理命令$(hadoop classpath --glob)

最佳答案

在这种情况下,我更愿意使用 bash 配置文件将 SHELL 更改为 sh -lc 而不是 sh -c

Dockerfile

FROM alpine
RUN echo "export NAME=TARUNLALWANI" >> ~/.profile
RUN echo $NAME
SHELL ["sh", "-lc"]
RUN echo $NAME
CMD env

构建输出

$ docker build . --no-cache
Step 1/6 : FROM alpine
Step 2/6 : RUN echo "export NAME=TARUNLALWANI" >> ~/.profile
Step 3/6 : RUN echo $NAME

Step 4/6 : SHELL sh -lc
Removing intermediate container a6a243f24519
Step 5/6 : RUN echo $NAME
TARUNLALWANI
Successfully built 054f35a4d89a

正如您所看到的,将 SHELL 从 sh -c 更改为 sh -lc 开始加载我们的配置文件。因此,您将更新 .profile 以基于

导出 CLASSPATH

运行容器

$ docker run 054f35a4d89a
HOSTNAME=92c4ca32b1f0
SHLVL=1
HOME=/root
PAGER=less
PS1=\h:\w\$
NAME=TARUNLALWANI
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
CHARSET=UTF-8

编辑-1

无需配置文件即可尝试此操作

ENTRYPOINT []
CMD ["/bin/sh", "-c", "export CLASSPATH=$(hadoop classpath --glob) && env"]

关于Docker 通过命令或文件设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238524/

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