在本地运行映像时替换Docker环境变量

时间:2019-07-20 05:28:17

标签: docker jmeter dockerfile

Docker映像:测试

以下是Dockerfile中的默认值:

ENV users=2
ENV rampup=10
ENV duration=120
ENV environment=DEV

以下是入口点

ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh:

bash ./bin/jmeter.sh -n -t -Jenvironment=${environment}  -Jusers=${users} -Jrampup=${rampup} -Jduration=${duration} -j ${workspace}report.log

现在,我想通过替换环境变量在本地运行它:

docker run test -e environment=STG -e users=20 -e rampup=10 -e duration=120

但是,这些值不会以某种方式被替换。我做错了什么,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

Dockerfile和Docker运行命令似乎很好,我很确定问题不在Docker中,这是您能做的最简单的示例。

FROM alpine
ENV users=2
ENV rampup=10
ENV duration=120
ENV environment=DEV
#COPY entrypoint.sh /entrypoint.sh
RUN echo $'#!/bin/ash \n\
echo \"env is Jenvironment=${environment}  -Jusers=${users} -Jrampup=${rampup} -Jduration=${duration} -j ${workspace}report.log"' > /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

构建

Docker build -t testenv .

运行

docker run -e rampup=10 -e users=test -t alpintenv ash

enter image description here

因此您可以尝试将entrypoint.sh更改为

#!/bin/bash
./bin/jmeter.sh -n -t -Jenvironment=${environment}  -Jusers=${users} -Jrampup=${rampup} -Jduration=${duration} -j ${workspace}report.log

答案 1 :(得分:1)

任何docker run选项(例如-e来设置环境变量)都需要在docker run命令中的图像名称之前 。映像名称之后的任何内容都将解释为您要运行的容器的命令,并且当您还有入口点时,会将其作为参数传递给入口点。 (如果您编辑脚本以包括行echo "$@",则会看到这些-e选项。)

docker run \
  -e environment=STG -e users=20 -e rampup=10 -e duration=120 \
  test