gpt4 book ai didi

docker - 具有环境变量的 ENTRYPOINT 不接受新参数

转载 作者:行者123 更新时间:2023-12-01 02:36:53 28 4
gpt4 key购买 nike

我们正在创建一个简单的Dockerfile,该文件的最后一行是

 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

我做错了什么?

最佳答案

/bin/sh -c 仅采用一个参数,即要运行的脚本。该参数后面的所有内容都是 shell 变量 $0$1 等,可以由脚本解析。虽然您可以使用 /bin/sh -c 语法来完成此操作,但它很尴尬,并且将来不会随您一起成长。

我不会尝试解析那里的变量,而是将其移动到您包含在图像中的entrypoint.sh中:

#!/bin/sh
exec spark-submit --master $SPARK_MASTER script.py "$@"

然后更改 Dockerfile 来定义:

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

exec 语法将 PID 1 中的 shell 脚本替换为 Spark-Submit 进程,从而允许信号通过。 "$@" 将传递来自 docker run 的任何参数,每个参数都会被引用,以防参数中有空格。由于它是由 shell 脚本运行的,因此 $SPARK_MASTER 将被扩展。

关于docker - 具有环境变量的 ENTRYPOINT 不接受新参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381244/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com