CMD 指令中是否允许 Docker ARG

Is Docker ARG allowed within CMD instruction

我有一个 Dockerfile,其中 ARGCMD 指令中使用:

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

arg 通过 docker-compose 传递:

  spark:
    build:
      context: spark
      args:
        - MASTER_URL=spark://master:7077

但是,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}]}

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

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