在 entrypoint.sh 以外的文件中使用命令行参数的值

Using values of command line arguments in a file other than entrypoint.sh

我的 tomcat docker 容器中有一个名为 setenv.sh 的文件。我从我的 DOCKERFILE 中使用它是这样的:

COPY setenv.sh /tomcat/bin/setenv.sh

在这个文件中,我想使用一些可以在我启动这个 docker 容器时传递的命令行参数。例如,如果我 运行 这个容器是这样的:

docker run -d --name somename -e FIRST_ARG=foo SECOND_ARG=bar

然后,在我的 setenv.sh 中,我想像这样使用它们:

export FIRST_ARG = <value of first_arg passed from command line>
export SECOND_ARG = <value of second_arg passed from command line>

问题

如何使用传入 docker run 的参数和 setenv.sh 中的 -e 标志?

您可以通过 $FIRST_ARG

直接访问它们
#!/usr/bin/env sh

# To access first param end etc...
echo "My constant $FIRST_ARG"
echo "My constant $SECOND_ARG"

exec MY_GPOGRAM

不需要再export他们了。程序将可以使用环境变量。

如果您的脚本中有特殊的逻辑来生成新的逻辑,那么可以这样做:

# some logic
NEW_ENV_VARIABLE = "blablabla $FIRST_ARG"

exec NEW_ENV_VARIABLE=$NEW_ENV_VARIABLE MY_PROGRAM

您可以像使用任何其他环境变量一样访问它们。也就是说,在您尝试使用它们之前,我会确保它们存在并分配一个合理的默认值(如果它们不存在)。

if [ -z "$ARG_1" ]; then
    export ARG_1=false
fi