python-2.7 - 将 args 传递给 Dockerfile 中的 python 脚本

标签 python-2.7 docker docker-compose dockerfile

我希望能够将来自 docker-compose file > dockerfile 的 Args 传递给运行接受参数的 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"]

在运行构建时,
运行回声 $INSTANCE_NUM

运行回声 $TOTAL_INSTANCES
打印在 docker-compose 文件中设置的实际值,但

当前的结果是 python 脚本按原样接受 ARGS,而不接受 docker-compose 文件中给出的值。
例如,如果打印出它的 str $INSTANCE_NUM 或 str $TOTAL_INSTANCES
我希望能够获得我在 docker-compose 文件中为传递的 ARG 设置的实际值。

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

谢谢!

最佳答案

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 中使用 build args如 CMD应该在启动时运行。

所以它不会工作,它只会按原样打印。
ARG INSTANCE_NUM
RUN echo $TOTAL_INSTANCES
CMD ["python","$INSTANCE_NUM"]

要消耗变量,需要在CMD中指定shell .
ARG INSTANCE_NUM
ENV INSTANCE_NUM=$INSTANCE_NUM
CMD ["sh", "-c", "echo $INSTANCE_NUM; python $INSTANCE_NUM"]

使用 ARG 构建,或者您可以在运行时覆盖。
 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

关于python-2.7 - 将 args 传递给 Dockerfile 中的 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57857165/

相关文章:

python - 最小化 Tensorflow 中一个变量的函数

python - 如何使用while循环而不使用无限循环(python 2.7)

python - 获取属性python

linux - 在 Docker 中运行 RabbitMQ 服务器

postgresql - docker-compose 在运行命令时找不到要注入(inject)到 Postgresql 的文件

python - 在 Django 项目中哪里安全地存储 Google_Application_Credentials?

python-2.7 - 如何使用 python ctypes 访问另一个进程的 PEB

ubuntu - autoconf 配置警告 :/usr/bin/file: No such file or directory

reactjs - React SPA动态环境配置

linux - 在 Docker compose 中限制可用的主机资源而不使用 swarm