[英]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.