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

将用户提供的docker构建参数传递给python程序

吕利
2023-03-14

我正在尝试将用户输入作为Dockerfile的构建参数,并尝试将其传递给python程序。下面是我的用例:

Dockerfile : 

FROM centos:7
USER root
RUN yum install -y python36-devel python36-pip
ARG number
COPY . /app
RUN ls -l /app
RUN echo ${number}.   <=================This displays output in Docker build console
CMD python3 /app/app.py -t ${number}

app.py

import argparse
import time

def input():
    parser = argparse.ArgumentParser()
    parser.add_argument('number', help='take program number as input')
    args = parser.parse_args()
    return args

def root(args):
    for i in range(10):
        print("Hello World from : " + str(args.number))
        time.sleep(2)

if __name__ == "__main__":
    args = input()
    root(args)

Docker生成命令:

app.py:错误:需要以下参数:number

共有1个答案

蓝飞
2023-03-14

生成完成后,生成参数就会超出范围。因此,当命令运行时(当您尝试启动容器时),参数没有值。而是使用维护其值的环境变量。如果仍然希望使用构建参数,可以执行如下操作:

FROM centos:7
USER root
RUN yum install -y python36-devel python36-pip
ARG number
ENV num ${number}
COPY . /app
RUN ls -l /app
RUN echo ${number}.   <=================This displays output in Docker build console
CMD python3 /app/app.py -t $num
 类似资料:
  • 问题内容: 我正在使用Jenkins通过该命令远程运行Ansible剧本。 该命令: 应该触发构建后操作,以通过SSH远程执行以下命令: 是“作业通知”下的字符串参数,并且已对作业进行了参数化。我已经成功执行了类似的命令,但是由于值是一个列表,因此该命令失败了。我尝试了“字符串参数”和“多行字符串参数”都无济于事。 这是堆栈跟踪: 注意:这可能是如何通过远程访问api将数组传递给jenkins参数

  • 问题内容: 我想将maven命令行参数传递给POM.xml,以便我可以将这些值用于构建目的中的其他目的。 问题答案: 经过一些搜索,我们可以以不同的方式提供参数,我发现一些有用的 … 实际上,在我的应用程序中,我需要保存并提供SVN版本作为参数,因此我已经按照上述方法实现了。 在运行构建时,我们需要为这些参数提供值,如下所示。 我在这里供应 它为我工作。谢谢

  • 问题内容: 我创建了一个新的詹金斯管道。(当前)使用单个名为的布尔选项对管道进行参数化。我的管道脚本是: 当我手动创建带有选中项的项目时,将按预期回显“ true”。但是,环境变量列表未显示。 我能够显示是否将呼叫包装在一个块中: 我将拥有比这更多的参数,因此不需要单独指定每个参数。 有没有办法将所有构建参数传送到节点的环境? 问题答案: 关键是,在管道脚本中,作业参数不会像常规作业一样自动注入到

  • 本文向大家介绍C#程序将参数传递给线程,包括了C#程序将参数传递给线程的使用技巧和注意事项,需要的朋友参考一下 要使用线程,请在代码中添加以下命名空间- 首先,您需要在C#中创建一个新线程- 上面,threadDemo是我们的线程函数。 现在将参数传递给线程- 上面设置的参数是- 示例 让我们看完整的代码,以将参数传递给C#中的线程。 输出结果

  • 我正在使用一个第三方库函数,它有大量的位置参数和命名参数。在我的代码中,从多个点使用相同的参数/值调用该函数。 为了便于维护,我不想在代码中多次硬编码几十个相同的参数。我希望有一种方法可以在数据结构中存储它们一次,所以我只需要传递数据结构。按照以下思路: 假设我调用的函数的签名如下: 假设在我的代码中,我想用 for arg1, for arg2 for arg4 (而且我没有使用arg3)。 我

  • 问题内容: 我的工厂如下 这是Foo的定义: 好。我不确定如何使用Guice将此参数传递给Foo构造函数? 有任何想法吗? 问题答案: 所有“ Guice构造函数参数”答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法: //在实现类上注释构造函数和辅助参数 //使用仅接受辅助参数的create()方法创建工厂接口。 // FooFactory接口没有显式的实现类(Guice Magi