[英]Use Dockerfile commands inside of a shell script?
假设我有一个 shell 脚本的入口点,因为我想在 dockerfile 中使用一些条件。 有没有办法做这样的事情?
入口点 ["./entry.sh", "lambda-name"]
entry.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 "$@"
在脚本的末尾。 这将运行您所有的 arguments。
ENTRYPOINT
是主容器进程。 它在您docker run
构建的映像时执行; 此时运行任何其他 Dockerfile 指令为时已晚。
特别是, CMD
ENTRYPOINT
或 Compose command:
或docker run image-name
之后的备用命令),因为 arguments 可以随心所欲, 因此,此时您实际上并不需要“设置容器的命令”,您只需执行您可能想要运行的任何命令。
#!/bin/sh
case "$1" in
a.handler) a.handler ;;
b.handler) b.handler ;;
*)
echo "$1 not found" >&2
exit 1
;;
esac
使用此设置,一个相当常见的 Docker 模式只是将传递的任何内容作为 arguments 并在入口点脚本的末尾运行它。
#!/bin/sh
# ... do any startup-time setup required here ...
exec "$@"
这与您在问题中显示的内容相匹配:如果第一个参数是a.handler
则运行该命令,依此类推。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.