是否允许在CMD指令中使用Docker ARG

Dar*_*Var 31 docker docker-compose

我有一个地方一个Dockerfile ARG在使用CMD指令:

ARG MASTER_NAME
CMD spark-submit --deploy-mode client --master ${MASTER_URL}
Run Code Online (Sandbox Code Playgroud)

arg通过docker-compose传递:

  spark:
    build:
      context: spark
      args:
        - MASTER_URL=spark://master:7077
Run Code Online (Sandbox Code Playgroud)

但是,ARG似乎没有得到扩展CMD.在我之后docker-compose up.

以下是检查显示的内容:

docker inspect  -f "{{.Name}} {{.Config.Cmd}}" $(docker ps -a -q)
/spark {[/bin/sh -c spark-submit --deploy-mode client --master ${MASTER_URL}]}
Run Code Online (Sandbox Code Playgroud)

Jes*_*oco 59

问题是args只能在构建时使用,并且CMD在运行时执行.我想现在唯一可以达到你想要的方法是在Dockerfile中用MASTER_NAME值设置一个环境变量.

ARG MASTER_NAME
ENV MASTER_NAME ${MASTER_NAME}
CMD spark-submit --deploy-mode client --master ${MASTER_NAME}
Run Code Online (Sandbox Code Playgroud)

  • 仅当我向其中添加等号(“=”)时,这才对我有用。例如:ARG IS_PROD=false ENVIS_PROD=$IS_PROD (8认同)
  • @franklin-yu ENV 变量保留在图像内。这就是为什么它们在运行时可用。 (3认同)
  • 谢谢,这解决了我的问题。但这对我来说仍然没有意义,我认为无论如何都应在构建过程中对此进行评估以获取完整路径,并将其保存为图像作为解析变量(读取参数)。 (2认同)
  • 你的意思是'ENV MASTER_URL $ {MASTER_NAME}`? (2认同)