当前位置: 首页 > 知识库问答 >
问题:

带有环境变量的ENTRYPOINT不接受新的params

胡修伟
2023-03-14
 ENTRYPOINT ["sh", "-c", "spark-submit --master $SPARK_MASTER script.py"]
 docker run --rm my_spark_app_image --param1 something --param2 something_else
 spark-submit --master $SPARK_MASTER script.py

预期的行为是容器执行:

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

我做错了什么?

共有1个答案

柯翔
2023-03-14

/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"]
 类似资料:
  • 在Ubuntu中,我设置了jdk环境(JAVA_HOME、JRE_HOME),JAVA版本可以使用。但我可以启动tomcat。一些信息: JAVA_HOME和JRE_HOME环境变量都没有定义 运行这个程序至少需要这些环境变量中的一个 环境集/等/配置文件 日志

  • Apache HTTP服务器提供了一个机制,可以把信息存储在叫做环境变量(environment variable)的命名变量中。这个信息可以用于控制诸如日志记录和访问控制之类的操作。此外,还可以作为一个和诸如CGI脚本这样的外部程序进行沟通的机制。本文档讨论了操作和使用这些变量的不同方法。 尽管这些变量也被称作环境变量,但它们和底层的、由操作系统控制的环境变量不能混为一谈。这些变量仅在Apach

  • 问题内容: 如果设置了环境变量,请说,然后在连接到固定字符串的入口点脚本中使用它,例如: 与作为环境varible的价值,我该怎么办呢?我尝试使用,但这似乎不起作用,因为它确实是正确的。 问题答案: 您正在使用ENTRYPOINT 的 exec形式 。与 shell表单 不同, exec表单 不会调用命令shell。这意味着正常的外壳处理不会发生。例如,将不会在$ HOME上进行变量替换。如果要进

  • 我有一个linux box,其中有一个用户“user1”,使用C shell。用户有。cshrc在其主目录中提供了一些有用的环境设置。 然而,当我使用这种可解析逻辑时,环境并没有为用户正确设置。 在输出中,我可以看到变量设置为。cshrc不在环境中。如何强制ansible处理用户的登录脚本? 非常感谢。

  • 变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)、邮件存放位置(MAIL)等。 值得一提的是,Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范。 我们可以使用 env 命令来查看到 Linux 系统中所有的环境变量,执行命令如下: [r

  • Git 总是在一个 bash shell 中运行,并借助一些 shell 环境变量来决定它的运行方式。 有时候,知道它们是什么以及它们如何让 Git 按照你想要的方式去运行会很有用。 这里不会列出所有的 Git 环境变量,但我们会涉及最有的那部分。 全局行为 像通常的程序一样,Git 的常规行为依赖于环境变量。 GIT_EXEC_PATH 决定 Git 到哪找它的子程序 (像 git-commit