簡體   English   中英

在 shell 腳本中使用 Dockerfile 命令?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM