Docker:根据环境变量编辑Docker语言 - entrypoint.sh



我用entrypoint.sh文件构建了一个Docker映像

#!/bin/sh
set -e
[...]
./app/dehydrated/dehydrated -c -t dns-01 -k '/app/dehydrated/hook.sh' -x

这是Dockerfile的最后一部分

[...]
ENTRYPOINT [ "docker-entrypoint.sh" ]

我用 启动容器docker run -it --rm -v $(pwd)/data:/app/dehydrated --name cfhookbash sineverba/cfhookbash:latest

我想添加一个env变量:

--env FORCE_RENEW=true

所以编辑我的入口点如下(伪代码)

if $FORCE_RENEW && FORCE_RENEW == TRUE then
./app/dehydrated/dehydrated -c -t dns-01 -k '/app/dehydrated/hook.sh' -x
else
./app/dehydrated/dehydrated -c -t dns-01 -k '/app/dehydrated/hook.sh'

(因此根据env添加参数X或no)。

有可能吗?

在普通shell脚本语法中可以做的任何事情在入口点shell脚本中都是合法的。我可以这样写:

RENEW_OPT=
if [ "$FORCE_RENEW" == TRUE ]; then
RENEW_OPT=-x
fi
./app/dehydrated/dehydrated -c -t dns-01 -k '/app/dehydrated/hook.sh' $RENEW_OPT

如果您控制dehydrated应用程序,将其设置为直接理解$FORCE_RENEW环境变量将比这个命令行选项更容易设置。实现这一点的机制将是特定于语言的,但是docker run -e设置了一个非常普通的环境变量。

另一个选项是将"容器"包含为命令"模式。任何作为"命令"传递的内容容器调用的一部分——docker run命令中映像名称之后的任何内容——作为参数传递给entrypoint脚本,您可以使用它将任意选项传递给主程序。

# entrypoint.sh
# -- does not specifically check for environment variables
# -- "$@" expands to any additional arguments
./app/dehydrated/dehydrated -c -t dns-01 -k '/app/dehydrated/hook.sh' "$@"
# Pass additional options after image name
docker run -it --rm 
sineverba/cfhookbash:latest 
-x

最新更新