在 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
我的 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