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

向Dockerfile中的python脚本传递参数

鲁光霁
2023-03-14

我希望能够将参数从docker-compose file>dockerfile传递到运行接受参数的python脚本的cmd/entrypoint

ARG INSTANCE_NUM
ENV INSTANCE_NUM=$INSTANCE_NUM
RUN echo $INSTANCE_NUM
ARG TOTAL_INSTANCES
ENV TOTAL_INSTANCES=$TOTAL_INSTANCES
RUN echo $TOTAL_INSTANCES

CMD ["python", "test.py", "$INSTANCE_NUM", 
"$TOTAL_INSTANCES"]

请协助,也许我在这里遗漏了什么或者只是没有正确理解。

谢谢!

共有1个答案

甘学潞
2023-03-14

Docker不会像您在CMD中传递的那样将它们作为环境变量来处理,因为CMD是作为Docker命令运行的,并且不涉及shell,所以没有shell就意味着没有变量插值,所以在您指定作为shell执行之前,它不会工作。

ARG INSTANCE_NUM
ENV INSTANCE_NUM=$INSTANCE_NUM
RUN echo $INSTANCE_NUM
ARG TOTAL_INSTANCES
ENV TOTAL_INSTANCES=$TOTAL_INSTANCES
RUN echo $TOTAL_INSTANCES

CMD ["sh", "-c", "python test.py $INSTANCE_NUM $TOTAL_INSTANCES"]

其次,您不能在cmd中使用构建参数,因为cmd应该在引导时运行。

所以它将不工作,它将只是打印它的原样。

ARG INSTANCE_NUM
RUN echo $TOTAL_INSTANCES
CMD ["python","$INSTANCE_NUM"]
ARG INSTANCE_NUM
ENV INSTANCE_NUM=$INSTANCE_NUM
CMD ["sh", "-c", "echo $INSTANCE_NUM; python $INSTANCE_NUM"]
 docker build --build-arg INSTANCE_NUM=testargs -t mypy .

docker run -it mypy

或者现在可以在运行时重写。

 docker run  -e INSTANCE_NUM=overide_value -it mypy 

docker-compose也可以做同样的事情

version: "3"
services:
 mongo:
   image: mypy
   environment:
     - INSTANCE_NUM=overide_from_compose
 类似资料:
  • 我正在一个java类中运行一个python脚本,如下所示: 问题在于脚本。py通常采用如下命令行参数: Pythonscript.py-i C:/diretory/path-o C:/目录/路径 有可能在Java中通过PythonTeperter传递这些参数吗? 更新: 感谢Juned Ahsan我的代码现在是这样的: 但是脚本仍然没有得到任何参数。 我这样用对了吗?

  • 好吧,所以这是已经问过的问题,但答案似乎没有多大帮助。我能够使用jython和该问题中发布的答案运行python脚本,但我无法传递变量...当我运行程序时,错误说没有像arg1 arg2和arg3这样的变量...我做错了什么? 这是python脚本 现在错误说arg1 arg2和arg3未声明

  • 这里是HTML文件,在脚本部分,我发出了一个ajax请求,将一些字符串传递给python函数。 在中,我设置了python脚本的路径。Python文件,我希望在该文件中从JS获取所请求的数据并将其打印出来。 注意:这里我没有使用任何框架。只是纯HTML、JS和Python文件。

  • 问题内容: 我有一个名为“ gcc_opt.pyw”的Python脚本,并将其目录包含在Windows PATH环境变量中。 但是不会将单个命令行参数传递给脚本。打印出sys.argv会告诉我argv列表中只有文件名。 该命令: 结果是 你能告诉我为什么没有其他论点吗? 我不知道它是否重要,但是我将python.exe设置为执行.pyw文件的默认程序,因为我看不到使用pythonw.exe的任何打

  • 问题内容: 我有一个名为的MySQL脚本文件,其中包含: 我在MySQL控制台中,如何将参数传递给脚本?这不会转发变量: 问题答案: 您可以使用用户变量来实现您描述的行为。在将变量用作模式标识符而不是数据值时,必须使用准备好的语句,以便可以动态组成查询。 : 调用为

  • 问题内容: 我是Python和Eclipse的新手,在理解如何将命令行参数传递给在Eclipse(Pydev)中运行的脚本时遇到一些困难。 以下链接说明了如何将命令行参数传递给python脚本。 要将命令行参数传递给模块(来自上面链接的代码), 我需要输入python控制台 要么 如何在Eclipse(Pydev)中将相同的参数传递给Python脚本? 谢谢 ! 问题答案: 如果您希望程序以交互方