我用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