CMD指令中是否允许Docker ARG

CMD指令中是否允许Docker ARG,docker,docker-compose,Docker,Docker Compose,我有一个Dockerfile,其中ARG用于CMD指令: ARG MASTER_NAME CMD spark-submit --deploy-mode client --master ${MASTER_URL} 参数通过docker compose传递: spark: build: context: spark args: - MASTER_URL=spark://master:7077 但是,ARG似乎没有为CMD展开。在我完成后,doc

我有一个Dockerfile,其中
ARG
用于
CMD
指令:

ARG MASTER_NAME
CMD spark-submit --deploy-mode client --master ${MASTER_URL}
参数通过docker compose传递:

  spark:
    build:
      context: spark
      args:
        - MASTER_URL=spark://master:7077
但是,
ARG
似乎没有为
CMD
展开。在我
完成后,docker撰写

以下是inspect显示的内容:

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

问题是
args
只能在构建时使用,而
CMD
在运行时执行。我想现在实现您想要的唯一方法是在Dockerfile中设置一个环境变量,并使用
MASTER\u NAME

ARG MASTER_NAME
ENV MASTER_NAME ${MASTER_NAME}
CMD spark-submit --deploy-mode client --master ${MASTER_NAME}

为什么在运行时只有环境变量可用?运行时进程是构建进程的子进程吗?谢谢,这解决了我的问题。但这对我来说仍然没有意义,我认为这应该在构建过程中被评估为完整路径,并作为解析变量(读取参数)保存在图像中。你的意思是
ENV MASTER_URL${MASTER_NAME}
?谢谢。。。在阅读之前尝试调试整个配置链浪费了太多时间this@franklin-yu ENV变量将保存在图像中。这就是为什么它们在运行时可用。