2017-04-12 46 views
0

我們正在創造一個簡單的Dockerfile,該文件的最後一行是入口點與環境變量不acepting新PARAMS

ENTRYPOINT ["sh", "-c", "spark-submit --master $SPARK_MASTER script.py"] 

script.py是一個簡單的pyspark應用程序(不是重要的討論),這pyspark應用會收到我們正在嘗試使用docker命令如下

docker run --rm my_spark_app_image --param1 something --param2 something_else 

script.py沒有得到任何參數來傳遞一些參數,即執行的容器:

spark-submit --master $SPARK_MASTER script.py 

預期的行爲是,集裝箱執行:

spark-submit --master $SPARK_MASTER script.py --param1 something --param2 something_else 

我在做什麼錯?

回答

2

/bin/sh -c只需要一個參數,腳本來運行。那個參數後面的所有內容都是一個shell變量$0$1等,可以由腳本解析。儘管你可以用/bin/sh -c語法來做到這一點,但它很尷尬,將來不會隨着你的增長而增長。

而不是試圖解析該變量在那裏,我會提出這個到您在您的圖像包括entrypoint.sh:

#!/bin/sh 
exec spark-submit --master $SPARK_MASTER script.py "[email protected]" 

,然後更改Dockerfile定義:

COPY entrypoint.sh /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh"] 

exec語法用spark-submit過程替換PID 1中的shell腳本,該過程允許信號通過。 "[email protected]"將通過來自docker run的任何參數,每個參數都有引號,以防參數中有空格。並且由於它由shell腳本運行,所以$SPARK_MASTER將被擴展。