在shell脚本中使用Dockerfile命令



假设我有一个shell脚本的入口点,因为我想在dockerfile中使用一些条件。有办法做这样的事情吗?

ENTRYPOINT["./entry.sh","lambda name"]

入口内部.sh

#!/usr/bin/env bash
lambda_name=$1
echo "$lambda_name"
if [ "$lambda_name" = "a.handler" ]; then
CMD [ "a.handler" ]
elif [ "$lambda_name" = "b.handler" ];then
CMD [ "b.handler" ]
else
echo "not found"
fi

首先,您不需要这种复杂情况。

为什么不这样呢?

#!/usr/bin/env bash
lambda_name=$1
echo "$lambda_name"
if [ "$lambda_name" = "a.handler" ]; then
./a.handler
elif [ "$lambda_name" = "b.handler" ];then
./b.handler
else
echo "not found"
fi

在你的脚本中,你也可以使用类似的东西

exec "$@"

在脚本的末尾。这将运行你所有的论点。

ENTRYPOINT是主容器进程。当您docker run构建的图像时执行;此时运行任何其他Dockerfile指令都为时已晚。

特别是,ENTRYPOINT会将图像的CMD(或Composecommand:docker run image-name之后的备用命令(作为参数传递给它,它可以用它做任何想做的事情。所以在这一点上,你真的不需要";设置容器的命令";,您可以执行您可能想要运行的任何命令。

#!/bin/sh
case "$1" in
a.handler) a.handler ;;
b.handler) b.handler ;;
*)
echo "$1 not found" >&2
exit 1
;;
esac

有了这种设置,一个相当常见的Docker模式就是将传递的任何内容作为参数,并在入口点脚本结束时运行。

#!/bin/sh
# ... do any startup-time setup required here ...
exec "$@"

这与问题中显示的内容相匹配:如果第一个参数是a.handler,则运行该命令,依此类推

相关内容

  • 没有找到相关文章

最新更新