【问题标题】:Get env variables from script and pass to Dockerfile [duplicate]从脚本中获取环境变量并传递给 Dockerfile [重复]
【发布时间】:2019-05-20 09:26:30
【问题描述】:

我有一个这样的script.sh

DATE="R_$(date +%Y_%m_%d__%H_%M_%S)"
export DISTDIR="$BUILDDIR/$DATE"

我不想像那样在我的 Dockerfile 中传递这个 DISTDIR

COPY build/$DISTDIR/ "$CATALINA_HOME"/webapps/ws/js/

我是怎么做到的,我搜索了各种模式,但都没有成功

【问题讨论】:

  • 不要为我工作
  • 为什么它不适合你?
  • 我不想在 docker run 中设置变量,我只想获取 script.sh 中设置的变量并作为参数传递给我的 Dockerfile
  • script.sh 在哪里运行? Docker 内部还是外部?
  • script.sh 就是一个例子,但有时他会在 Docker 之外

标签: bash shell docker environment-variables dockerfile


【解决方案1】:

问题在于传递环境变量,而不是您如何设置它(dotenv 与否)或您如何使用它(设置变量或 COPY)。

这是一个完整的演示,使用了from the duplicate 技术。这是script.sh

#!/bin/bash
mycustomvar="file.$RANDOM"
touch "$mycustomvar"
echo "I am running outside Docker with mycustomvar=$mycustomvar"
docker build --build-arg mycustomvar="$mycustomvar" .

还有一个Dockerfile

FROM alpine
ARG mycustomvar
RUN echo "I am running in docker with mycustomvar=$mycustomvar"
COPY $mycustomvar /tmp/
RUN ls /tmp

运行它时会发生以下情况:

$ sudo ./script.sh
I am running outside Docker with mycustomvar=file.10518
Sending build context to Docker daemon  17.41kB
Step 1/5 : FROM alpine
 ---> 3fd9065eaf02
Step 2/5 : ARG mycustomvar
 ---> Using cache
 ---> a6dfa6001164
Step 3/5 : RUN echo "I am running in docker with mycustomvar=$mycustomvar"
 ---> Running in e958044bfd11
I am running in docker with mycustomvar=file.10518
 ---> 95c107e49291
Removing intermediate container e958044bfd11
Step 4/5 : COPY $mycustomvar /tmp/
 ---> d36445b49261
Removing intermediate container e3ac014d1ba9
Step 5/5 : RUN ls /tmp
 ---> Running in 590409a81df5
file.10518
 ---> d734f83cc8ec
Removing intermediate container 590409a81df5
Successfully built d734f83cc8ec

如您所见,script.sh 设置了一个变量,并且 RUN 和 COPY 语句都可以访问它。

【讨论】:

  • 经过多次尝试后我得到了......正如我所说的 script.sh 是一个涉及更多脚本的示例,错误在于这些脚本之间的变量传递,但最后我做了,非常感谢,你帮了我很大的忙
猜你喜欢
  • 2018-05-11
  • 2018-04-27
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2022-11-05
相关资源
最近更新 更多